Spring Boot实战之逐行释义HelloWorld(3)

@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(excludeFilters = {
        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),
        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })
public @interface SpringBootApplication {

  该注解的主要方法就不说了,大家看下就知道,主要是为上面这些注解提供别名。该注解上前四个注解(@Target(ElementType.TYPE),@Retention(RetentionPolicy.RUNTIME),@Documented,@Inherited)大家应该都知道,不熟悉的朋友自己去看下JDK如何实现自定义的注解。我们详细解释一下后面三个注解:@SpringBootConfiguration,@EnableAutoConfiguration,@ComponentScan。

  先看一下SpringBootConfiguration,这个注解比较简单,源码如下:

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Configuration
public @interface SpringBootConfiguration {
}

  这个注解仅仅是继承了@Configuration,大家应该知道,Spring提供三种方式的配置:(1)xml文件配置(2)annotation配置(3)Java 类配置。而@Configuration就是用于标识一个类为配置类的注解。Spring 4以后比较推崇通过Java类的方式来进行配置,所以Spring boot也倾向于这种方配置式。并且从源码可以看出,SpringBootConfiguration的作用就是标识类为配置类。

  接下来我们看一下@EnableAutoConfiguration注解,这个注解的源码有点复杂,在这不做细讲,后面的文章再详细解析期实现方式。这里说一下该注解的作用,它的主要功能是实现自动配置,什么叫做自动配置?就是Spring boot会根据你引入的jar包做一些自动的配置,例如,在classpath有HSQLDB的jar,spring boot就会自动给你配置一个内存数据库。在这个例子里面我们也可以看到,因为我们引入了Spring-mvc、tomcat等相关的jar,spring boot就会猜测你是一个web工程,然后就会自动做一些spring mvc的配置,比如对静态资源的支持、将返回结果自动转为json格式数据的支持等。这些都是自动配置的结果。对Spring Enable*注解熟悉的同学应该能够更容易理解这个注解,因为Spring中有很多类似的注解。

  最后我们再看下@ComponentScan,这个注解不是Spring boot提供的,而是Spring提供的,Spring扫描的包或类,即哪些包和类会自动纳入Spring IoC容器的管理,IoC根据配置对这些类进行实例化。

  现在我们再总结一下SpringBootConfiguration这个注解的作用:

  1)标志该类为一个配置类。
  2)指定扫描的包,便于Spring IoC容器对其进行实例和生命周期的管理。
  3)自动配置,通过引入的jar包,猜测用户的意图进行自动化配置。

四、总结

  本文详细分析了Spring boot实现的一个web版的Hello World,通过这个例子,我们了解了Spring boot的基本操作,并通过对每行的代码的分析,对Spring boot的原理有了一个大致的了解。总体来讲,Spring boot 统一管理了jar包,然后会根据我们选择的starter来进行自动化配置,通过这种方式来解决复杂的依赖管理,精简配置,从而使得开发者能够更加专注于自己的业务,而不需要做那些很复杂的配置工作。同时,Spring boot这种快速、轻量级的服务也非常适合微服务架构,这个后续有机会再跟大家分享,欢迎继续关注。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/79a95b3d96f16aabca4d7b0c2d9053ea.html