@AutoConfigurationPackage注解作用
我们知道@EnableAutoConfiguration
是springboot实现自动配置的关键注解。其由@AutoConfigurationPackage
@Import(AutoConfigurationImportSelector.class)
构成。
这里我们讨论下@AutoConfigurationPackage
的作用,作者才疏学浅,望大家多多指正。
@AutoConfigurationPackage构成
由源码不难看出,@AutoConfigurationPackage
就是通过@Import导入了AutoConfigurationPackages.Registrar
。我们继续跟进去,其中new PackageImports(metadata).getPackageNames().toArray(new String[0])
返回的就是springboot主类所在位置packageNames。
我们继续进入register()
方法内,该方法将当前注解标识的包名packageNames存入组件中加入到容器里;也就是说@AutoConfigurationPackage就是将前文说的packageName存入bean注册到容器中。
值得注意的是,很多人说@AutoConfigurationPackage是用来扫描组件的和@ComponentScan类似,这种说法是错的,前文已经说过了@AutoConfigurationPackage只是存了主类所在位置packageName,并不具有扫描的功能。
紧接着有引入一个问题,这个packageName
有什么用?
答:这个packageName
将当作第三方组件自动配置时的基包basePackage
,第三方调用basePackage
用于扫描basePackage
包内的自身实体类加入到容器里。
举例:在MybatisAutoConfiguration
中通过AutoConfigturationPackage.get()
就获得到了basePackage
,供后续使用。