《02.Spring Boot实战:Spring Boot核心原理剖析》

来源:互联网 发布:python tcp连接不释放 编辑:程序博客网 时间:2024/05/17 12:03
  1. 在上节中我们通过了一个小的入门案例已经看到了Spring Boot的强大和简单之处。本章将详细介绍Spring Boot的核心注解,基本配置和运行机制。笔者一直认为:精通一个技术一定要深入了解这个技术帮助我们做了哪些动作,深入理解它底层的运行原理,只有达到这个目标才可以熟练使用框架,最终达到融会贯通的目的。

1.启动类与@SpringBootApplication

Spring Boot的项目一般都会有注解*Application标注的入口类,入口类中会有一个main方法,main方法是一个标准的Java应用程序的入口方法,可以直接启动。@SpringBootApplication注解是Spring Boot的核心注解,用此注解标注的入口类是应用的启动类,通常会在启动类的main方法中通过 SpringApplication.run(App.class, args) 来启动Spring Boot应用项目。@SpringBootApplication其实是一个组合注解,查看源码如下:

    1. // 程序清单:org/springframework/boot/autoconfigure/SpringBootApplication

    2. @Target(ElementType.TYPE)

    3. @Retention(RetentionPolicy.RUNTIME)

    4. @Documented

    5. @Inherited

    6. @SpringBootConfiguration

    7. @EnableAutoConfiguration

    8. @ComponentScan(excludeFilters = {

    9.        @Filter(type = FilterType.CUSTOM, classes = TypeExcludeFilter.class),

    10.        @Filter(type = FilterType.CUSTOM, classes = AutoConfigurationExcludeFilter.class) })

    11. public @interface SpringBootApplication {

    12. @AliasFor(annotation = EnableAutoConfiguration.class, attribute = "exclude")

    13.    Class<?>[] exclude() default {};

    14.    @AliasFor(annotation = EnableAutoConfiguration.class, attribute = "excludeName")

    15.    String[] excludeName() default {};

    16.    @AliasFor(annotation = ComponentScan.class, attribute = "basePackages")

    17.    String[] scanBasePackages() default {};

    18.    @AliasFor(annotation = ComponentScan.class, attribute = "basePackageClasses")

    19.    Class<?>[] scanBasePackageClasses() default {};

    20. }

cation注解主要组合了以下注解:(1)@SpringBootConfiguration:这是Spring Boot项目的配置注解,这也是一个组合注解:


    1. //程序清单:org/springframewor/boot/SpringBootConfiguration

    2. @Target(ElementType.TYPE)

    3. @Retention(RetentionPolicy.RUNTIME)

    4. @Documented

    5. @Configuration

    6. public @interface SpringBootConfiguration {

    7. }


在Spring Boot项目中推荐使用@SpringBootConfiguration注解来替代@Configuration注解。(2)@EnableAutoConfiguration:启动自动配置,该注解会让Spring Boot根据当前项目所依赖的jar包自动配置项目的相关配置项。例如,当我们在Spring Boot项目的pom.xml文件中配置了spring-boot-starter-web依赖:

    1. <dependency>

    2.    <groupId>org.springframework.boot</groupId>

    3.    <artifactId>spring-boot-starter-web</artifactId>

    4. </dependency>

项目就会自动添加Tomcat和Spring MVC的依赖,同时Spring Boot会对Tomcat和Spring MVC进行配置项的自动配置,打开pom.xml选择文件左下角的Dependency Hierarchy查看如下图所示:


                                图2.1 spring-boot-starter-web自动配置图

通过上述例子可以看出,如果我们又在项目中添加spring-boot-starter-data-solr依赖,Spring Boot就会自动进行Solr技术的相关配置。(3) @ComponentScan:扫描配置,Spring Boot默认会扫描@SpringBootApplication所在类的同级包以及它的子包。所以建议将@SpringBootApplication修饰的入口类放置在项目包下(Group Id+Artifact Id),这样做的好处是:可以保证Spring Boot项目自动扫描到项目所有的包。

原创粉丝点击