Spring Boot架构篇 - @AutoConfigurationPackage
前言
在@EnableAutoConfiguration、@SpringBootApplication注解中,有看到标注@AutoConfigurationPackage注解。
实质上,它负责保存标注相关注解的类的所在包路径。使用一个BasePackage类,保存这个路径。然后使用@Import注解将其注入到ioc容器中。这样,可以在容器中拿到该路径。
@AutoConfigurationPackage
首先看下@AutoConfigurationPackage的声明
表示对于标注该注解的类的包,应当使用AutoConfigurationPackages注册。
接着看Registrar这个类。
重点看下registerBeanDefinitions方法。
方法的第二个参数通过new PackageImport(metadata).getPackageName()
方法设置。
接着看下PackageImport的构造器方法。
metadata:实际上是StandardAnnotationMetadata实例。
metadata#getClassName():获取标注@AutoConfigurationPackage注解的类的全限定名。
ClassUtils.getPackageName(…):获取其所在包。
然后回去看register(…)方法。
走else的逻辑。
构造了一个BackPackages实例,进行注册。
通过查看它的构造器方法,证明了上面所说的。