SpringBoot所具备的特征有:
自己的理解:
SpringBoot,顾名思义,给人的感觉就是让Spring启动的这么一个项目。在过去,我们要让一个Spring项目启动,往往需要配置很多的xml配置文件,但是在使用SpringBoot之后,我们甚至无需写一行xml,就可以直接将整个项目启动,这种“零配置”的做法减轻了开发人员很多的工作量,可以让开发人员一心扑在业务逻辑的设计上,使项目的逻辑更加完善。
除此之外,其采用了JavaConfig的配置风格,导入组件的方式也由原来的直接配置改为@EnableXXXX,这种纯Java代码的配置和导入组件的方式,使代码看上去更加的优雅,所以SpringBoot如今受到大小公司和大多数程序员的青睐,不是没有原因的。
SpringBoot之所以可以做到简化配置文件直接启动,无外乎是其内部的两种设计策略:开箱即用和约定大于配置。
开箱即用:在开发过程中,通过maven项目的pom文件中添加相关依赖包,然后通过相应的注解来代替繁琐的XML配置以管理对象的生命周期。
约定大于配置:由SpringBoot本身来配置目标结构,由开发者在结构中添加信息的软件设计范式。这一特点虽降低了部分灵活性,增加了BUG定位的复杂性,但减少了开发人员需要做出决定的数量,同时减少了大量的XML配置,并且可以将代码编译、测试和打包等工作自动化。
##相关注解
SpringBoot 自动配置主要通过 @EnableAutoConfiguration , @EnableConfigurationProperties 或者 @ConfigurationProperties 等几个注解来进行自动配置完成的。
@EnableAutoConfiguration 注解开启自动配置,主要作用就是调用 Spring-Core 包里的 loadFactoryNames() ,将 autoconfig 包里的已经写好的自动配置加载进来。
@EnableConfigurationProperties 的作用就是,给自动配置提供具体的配置参数,只需要写在 application.properties 中,就可以通过映射写入配置类的 POJO 属性中。
@EnableAutoConfiguration
@Enable*注解并不是SpringBoot 新发明的注释,Spring框架就引入了这些注释,用这些注释替代XML配置文件。比如: @EnableTransactionManagement 注解,它能够开启声明事务管理 @EnableWebMvc 注释,它能启用Spring MVC
从启动类的@SpringBootApplication进入,在里面找到了@EnableAutoConfiguration,
@EnableAutoConfiguration里通过@Import导入了EnableAutoConfigurationImportSelector ,
进入他的父类AutoConfigurationImportSelector
找到selectImports() 方法,他调用了getCandidateConfigurations() 方法,在这里,这个方法又调用了Spring Core包中的loadFactoryNames() 方法。这个方法的作用是,会查询META-INF/spring.factories 文件中包含的JAR 文件。
当找到spring.factories文件后,SpringFactoriesLoader将查询配置文件命名的属性。
Jar 文件在org.springframework.boot.autoconfigure的spring.factories
spring.factories 内容如下(截取部分),在这个文件中,可以看到一系列Spring Boot自动配置的列表
# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.mybatis.spring.boot.autoconfigure.MybatisLanguageDriverAutoConfiguration,\
org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration
Properties系列注释
@EnableConfigurationProperties注解内容
这说明注解后面可以写内容,比如
MybatisProperties类中的@ConfigurationProperties(prefix = “mybatis”),这个注解的意思是读取application.yml中以mybatis前缀开头的数据
application.yml中的配置
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/wn727
username: root
password: root
mvc:
format:
date-time: yyyy-MM-dd HH:mm:ss
jackson:
date-format: yyyy-MM-dd HH:mm:ss
mybatis:
type-aliases-package: com.woniuxy.demo.entity
configuration:
map-underscore-to-camel-case: true
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
mapper-locations: classpath*:mappers/**/*.xml
server:
port: 8080
这样就可以获取对应的配置
|