Spring Boot架构篇 - @AutoConfigurationPackage


前言

在@EnableAutoConfiguration、@SpringBootApplication注解中,有看到标注@AutoConfigurationPackage注解。

实质上,它负责保存标注相关注解的类的所在包路径。使用一个BasePackage类,保存这个路径。然后使用@Import注解将其注入到ioc容器中。这样,可以在容器中拿到该路径。


@AutoConfigurationPackage

首先看下@AutoConfigurationPackage的声明

Spring Boot架构篇 - @AutoConfigurationPackage

表示对于标注该注解的类的包,应当使用AutoConfigurationPackages注册。


接着看Registrar这个类。
Spring Boot架构篇 - @AutoConfigurationPackage

重点看下registerBeanDefinitions方法。

方法的第二个参数通过new PackageImport(metadata).getPackageName()方法设置。

接着看下PackageImport的构造器方法。

Spring Boot架构篇 - @AutoConfigurationPackage

metadata:实际上是StandardAnnotationMetadata实例。
metadata#getClassName():获取标注@AutoConfigurationPackage注解的类的全限定名。
ClassUtils.getPackageName(…):获取其所在包。

然后回去看register(…)方法。
Spring Boot架构篇 - @AutoConfigurationPackage

走else的逻辑。
构造了一个BackPackages实例,进行注册。

Spring Boot架构篇 - @AutoConfigurationPackage

通过查看它的构造器方法,证明了上面所说的。