spring对mapper注解的源码解析
时间: 2023-09-15 17:16:47 浏览: 92
在Spring中,我们可以使用`@Mapper`注解来标识一个Mapper接口,并将它交由Spring容器管理。当我们在使用`@Autowired`注解注入Mapper接口时,Spring会自动为我们创建该接口的实现类,并将该实现类交由Spring容器管理。
下面是`@Mapper`注解的源码解析:
```java
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
public @interface Mapper {
String value() default "";
}
```
可以看到,`@Mapper`注解是一个标准的Java注解,它只有一个`value`属性,用于指定Mapper接口的名称。
在Spring中,`@Mapper`注解是由`org.mybatis.spring.annotation.MapperScan`注解来扫描的。当我们在配置文件中使用`@MapperScan`注解时,Spring会扫描指定的包路径下的所有Mapper接口,并将它们交由Spring容器管理。
具体实现可以参考Mybatis-Spring项目中的代码。
相关问题
mapper注解被解析源码
在 MyBatis 中,`@Mapper` 注解通常用于标记一个接口类,表示这个接口是一个 MyBatis Mapper 接口,需要被 MyBatis 自动扫描并生成对应的实现类。具体的源码解析如下:
1. `org.mybatis.spring.mapper.MapperScannerConfigurer` 类的 `postProcessBeanDefinitionRegistry()` 方法,该方法会扫描指定包下的类,并将符合条件的类转换成 `BeanDefinition` 对象,并添加到 `BeanDefinitionRegistry` 中。
2. `org.mybatis.spring.mapper.ClassPathMapperScanner` 类的 `doScan()` 方法,该方法会遍历指定包下的所有类,并判断是否符合 Mapper 接口的条件。判断条件如下:
- 类必须是接口类型。
- 类上必须标注有 `@Mapper` 注解。
3. 如果类符合条件,则将其转换成 `BeanDefinitionHolder` 对象,并添加到 `BeanDefinitionRegistry` 中。
4. 在 `org.mybatis.spring.mapper.MapperFactoryBean` 类中,会根据 `MapperFactoryBean` 的类型,生成对应的 Mapper 接口实现类。这里会通过 JDK 动态代理技术,根据 Mapper 接口定义生成对应的动态代理类。
5. 在执行 Mapper 接口方法时,实际上是执行了对应的动态代理类的方法,而动态代理类又会调用 `SqlSessionTemplate` 类中的方法,最终完成数据库操作。
阅读全文