本文主要是介绍@MapperScan注解的原理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
spring源码看多了,就发现很多开关型的注解,以@EnableXXX开头的这些注解,大体上实现原理差不多。@MapperScan也不能免俗,没办法,谁让spring允许插手bean实例化过程的方式只那么几种呢!
同样的通过@Import实现开关效应,MapperScanRegistrar实现ImportBeanDefinitionRegistrar接口,传一个registry给你,至于你想怎么注册就自己去注册。
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Documented
@Import(MapperScannerRegistrar.class)
@Repeatable(MapperScans.class)
public @interface MapperScan {String[] value() default {};String[] basePackages() default {};Class<?>[] basePackageClasses() default {};
}
public class MapperScannerRegistrar implements ImportBeanDefinitionRegistrar, ResourceLoaderAware {private ResourceLoader resourceLoader;setResourceLoader(ResourceLoader resourceLoader) {this.resourceLoader = resourceLoader;}public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {AnnotationAttributes mapperScanAttrs = AnnotationAttributes.fromMap(importingClassMetadata.getAnnotationAttributes(MapperScan.class.getName()));if (mapperScanAttrs != null) {registerBeanDefinitions(mapperScanAttrs, registry);}}void registerBeanDefinitions(AnnotationAttributes
这篇关于@MapperScan注解的原理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!