NoteBook / Spring Boot基础(2)

  1. Spring Boot的核心注解
  2. Spring Boot的基本配置
  3. Spring Boot的自动配置原理
  • Spring Boot的核心注解

Spring Boot的项目一般都会有入口类(带有某某Application注解标注),入口类中会有一个main方法,main方法是一个标准Java应用程序的入口方法,可以直接启动

@SpringBootApplication注解是Spring Boot的核心注解,用此注解标注的入口类是应用的启动类,通常会在启动类的main方法中通过SpringApplication.run(App.class,args)来启动Spring Boot应用项目

@SpringBootApplication是一个组合注解:

1、@SpringBootConfiguration:Spring Boot项目的配置注解

2、@EnableAutoConfiguration:启动自动配置,会让Spring Boot根据当前项目所依赖的jar包自动配置项目的相关配置项

例如:在pom.xml文件中配置了如下spring-boot-starter-web依赖,项目就会自动添加Tomcat和SpringMVC的依赖,同时Spring Boot会对Tomcat和SpringMVC进行配置项的自动配置

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

3、@ComponentScan:扫描配置,Spring Boot默认会扫描@SpringBootApplication所在类的同级包以及它的子包,所以建议将@SpringBootApplication修饰的入口类放置在项目包下(Group Id+Artifact Id,不要再下一层),这样做的好处是,可以保证Spring Boot项目自动扫描到项目所有的包


  • Spring Boot的基本配置

关闭特定的自动配置应该使用@SpringBootApplication下的exclude参数,以关闭Redis自动配置为例:

@SpringBootApplication(exclude={RedisAutoConfiguration.class})

全局配置文件:application.properties或者application.yml,用于修改Spring Boot项目的默认配置值,一般放到src/main/resources目录下,例如,修改进入DispatcherServlet的请求地址规则:

server.servlet-path=*.action

server.servlet-path参数用于将进入DispatcherServlet的规则修改为:*.action(localhost:9999/hello.action

Spring Boot提供了很多简化项目开发的“开箱即用”的依赖模块:

1、spring-boot-starter:Spring Boot的核心启动器,包含了自动配置、日志和YAML文件的支持

2、spring-boot-starter-aop:支持面向切面的编程(AOP),包括spring-aop和AspectJ

3、spring-boot-starter-data-mongodb:支持MongoDB数据库,包括spring-data-mongodb

4、spring-boot-starter-jdbc:支持JDBC数据库

5、spring-boot-starter-thymeleaf:支持Thymeleaf模版引擎,包括与Spring的集成

6、spring-boot-starter-web:支持全栈式Web开发,包括Tomcat和spring-webmvc

……

ActiveMQ:Apache出品的最流行、能力强劲的开源消息总线

JMS:Java Message Service

Apache Cassandra:一套开源分布式NoSQL数据库系统

Spring Data:一个用于简化数据库访问并支持云服务的开源框架

JPA:Java Persistence API

Hibernate:Java对象与关系数据库之间建立某种映射

Neo4j:一个高性能的NoSQL图形数据库,它将结构化数据存储在网络上而不是表中

Redis:键值存储数据库,NoSQL数据库之一


  • Spring Boot的自动配置原理

Spring Boot在进行Spring Application对象实例化时会加载META-INF/spring.factories文件,将该配置文件中的配置载入spring容器,进行自动配置

SpringApplication.run(App.class,args)

//run方法创建SpringApplication对象实例

//SpringApplication调用initialize(sources)方法

//initialize调用getSpringFactoriesInstances方法

//getSpringFactoriesInstances调用loadFactoryNames方法

//loadFactoryNames加载常量FACTORIES_RESOURCE_LOCATION

public static final String FACTORIES_RESOURCE_LOCATION=“META-INF/spring.factories”;

可以看出,最终Spring Boot是通过加载META-INF/spring.factories文件进行自动配置的

META-INF/spring.factories文件非常重要,用来指导Spring Boot找到指定的自动配置文件,重点内容如下:

# PropertySource Loaders:对应的值表示指定Spring Boot配置文件支持的格式

# Run Listeners:对应的值表示运行的监听器类

# Application Context Initializers:对应的值表示Spring Boot中应用程序的初始化类

ServerPortInfoApplicationContextInitializer的作用是监听EmbeddServletContainer-InitializerEvent类型的事件,然后将内嵌的Web服务器使用的端口设置到Application-Context中

# Application Listeners: 对应的值表示Spring Boot中的应用程序监听器,共有9个

ConfigFileApplicationListener的作用是读取加载Spring Boot的配置文件如application.properties等,非常重要

# Environment Post Processors:对应的值表示Spring Boot中支持的动态读取文件方式

SpringApplicationJsonEnvironmentPostProcessor的作用把环境中spring.application.json的json值转化为MapPropertySource,并将这个MapPropertySource添加到环境的属性源列表中

Spring Boot是通过SpringFactoriesLoader的loadFactoryNames方法读取spring.factories文件的,SpringFactoriesLoader是Spring框架的一个工具类,主要功能就是从指定的配置文件META-INF/spring.factories加载配置

@SpringBootApplication注解通过使用@EnableAutoConfiguration注解自动配置的原理为:

从classpath中搜寻所有的META-INF/spring.factories配置文件,并将其中org.springframework.boot.autoconfiguration.EnableAutoConfiguration对应的配置项通过反射,实例化为对应的标注了@Configuration的IoC容器配置类(@Configuration类),然后汇总并加载到Spring框架的IoC容器

Web开发的自动配置类是org.springframework.boot.autoconfigure.web.WebMvcAutoConfiguration,在这个类中自动实现了Spring MVC的配置

@ConditionalOnClass是一个条件注解,只有当前项目运行环境中有某些类,才会……

@Bean定义了一个Bean对象InternalResourceViewResolver

@ConditionalOnMissingBean是一个条件注解,在当前环境下没有这个Bean的时候才会创建该Bean

发布了20 篇原创文章 · 获赞 1 · 访问量 4904

猜你喜欢

转载自blog.csdn.net/piaoken5588/article/details/104332805