[TOC]
进入到@SpringBootApplication
的源码,可以看到里面组合了三个我们感兴趣的注解:@ComponentScan
,@EnableAutoConfiguration
,@SpringBootConfiguration
.我们一一分析这三个注解.
2.1@ComponentScan
使用过spring框架的小伙伴都知道,spring里有四大注解:@Service
,@Repository
,@Component
,@Controller
用来定义一个bean.@ComponentScan
注解就是用来自动扫描被这些注解标识的类,最终生成ioc容器里的bean.可以通过设置@ComponentScan
basePackages,includeFilters,excludeFilters属性来动态确定自动扫描范围,类型已经不扫描的类型.默认情况下:它扫描所有类型,并且扫描范围是@ComponentScan
注解所在配置类包及子包的类,在hello word 工程里,添加了一个componentscan 分支,说明这个情况.QuickStartApplication
,CurrentPackageController
类的package是com.simos.componentscan
.SubPackageController
的package 是com.simos.componentscan.controller
.而OutPackageController
的package是com.simos.controller
.启动后只有:SubPackageController
,CurrentPackageController
被扫描生成bean,而OutPackageController
却没有被扫描到.下面三个截图说明了这一点:
current.png
sub.png
out.png
总结一下,使用@SpringBootApplication
注解,就说明你使用了@ComponentScan
的默认配置,这就建议你把使用@SpringBootApplication
注解的类放置在root package(官方表述)下,其他类都置在root package的子包里面,这样bean就不会被漏扫描.
2.2@SpringBootConfiguration
这个注解的作用与@Configuration
作用相同,都是用来声明当前类是一个配置类.可以通过@Bean
注解生成IOC容器管理的bean.在QuickStartApplication
中定义bean,并在@HelloController
中注入使用
1 |
|
下面是@HelloController
1 |
|
2.3@EnableAutoConfiguration
@EnableAutoConfiguration
是springboot实现自动化配置的核心注解,通过这个注解把spring应用所需的bean注入容器中.@EnableAutoConfiguration
源码通过@Import
注入了一个ImportSelector
的实现类