核心注解分析

许多 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容器中。