许多 Spring Boot 开发人员喜欢他们的应用程序使用自动配置、组件扫描并能够在他们的“应用程序类”上定义额外的配置。@SpringBootApplication可以使用单个注释来启用这三个功能,即:
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan
@EnableAutoConfiguration: 启用Spring Boot 的自动配置机制 其实告诉为什么项目里能够自动把各种starter依赖进来以后就能够使用和生效。就是这个注解来完成。
@ComponentScan:@Component在应用程序所在的包上启用扫描(查看最佳实践)在传统的spring开发中,我们如果要进行包的扫描,就必须去在配置文件xml指定。如下:
<component-scan base-package="com.xxx.service"></component-scan>
<component-scan base-package="com.xxx.dao"></component-scan>
<component-scan base-package="com.xxx.web"></component-scan>
上面的方式是传统的加载bean到springioc容器的方式,目的是告诉spring容器在启动的时候会去扫描上面的三个目录,然后找到这个包下所有的类,并且加了@Service ,@Conpoment、@Controller、@Repository等,会加入ioc容器,其它不会加载。
springboot的默认加载机制:是以当前启动的类包作为component-scan默认扫描的包。
- @SpringBootConfiguration: 启用在上下文中注册额外的 bean 或导入额外的配置类。Spring 标准的替代方案@Configuration,可帮助您在集成测试中检测配置。
@SpringBootApplication
// 相当于 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
- 配置类必须加注解@Configuration 或者@SpringBootConfiguration
- 和@ComponentScan 的作用是一样的。
总结
springboot核心注解:@SpringBootApplication ,它是由
- @ComponentScan
- @SpringConguration
- @EnableAutoConfiguration
三个注解的复合。三个注解的作用:都是把项目中bean,第三容器的bean,把官方提供starter的配置类的bean加载springioc容器的作用:
- @ComponentScan:是把你项目中,自己编写的那些bean加载ioc容器中,比如:UserService,UserMapper.UserConntroller
- @EnableAutoConfiguration :是把官方提供starter里面,内置的配置类的bean加载ioc容器冲
- 内部提供的配置类:xxxxAutoConfiguration 比如:
- RedisAutoConfiguration 这些都配置类
- @SpringConfiguration:+@Bean (避免重复造轮子)
- 如果你对官方的starter提供的配置不满意,你可以考虑用这个放去覆盖内部的配置。
- 或者未来你要自己去扩展starter机制,就必须自己去定义配置类。(自定义starter)
- 方便扩展,可以便于后续去开发的依赖公共模板
- 或者未来你想自定义starter你就可以用配置类完成。
- 传统的方式的扩展,通过xml去配置,配置类就是xml的替代。
- @SpringConfiguration+@Bean 更深层次含义:就说官方没提供的你自己去扩展把。@Bean必须要配置配置,或者@Component组件或者其子组件都有用。否则无意义。但是还推荐:配置注解
最后:无论上面那种方式,其目的都是把项目中,其他人写好的,或官方的提供的bean记载到ioc容器中。