每一个你不满意的现在,都有一个你不努力的曾经. 网站首页 > 其他
springBoot核心“自动装配”
发布时间:2018-12-27 10:24:24 修改时间:2018-12-27 10:24:24 阅读:5177 评论:0 0
- boot减少了很多的spring必要配置
- 可以以jar包的方式独立运行,通过java -jar 就可以运行。
- 使用maven配置时,在pom。xml中引用 spring-boot-starter-web 就会自动加入所有的依赖包。
- boot可以自动配置bean(过滤字符集,视图解析器)。
- 不需要任何xml配置(spring4也可以)
- boot自动注入的类(字符过滤器)
- 判断条件(依赖@Conditional)
- 组装文件(1+2)
- <filter>
- <filter-name>characterEncodingFilter</filter-name>
- <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
- <init-param>
- <param-name>encoding</param-name>
- <param-value>UTF-8</param-value>
- </init-param>
- <init-param>
- <param-name>forceEncoding</param-name>
- <param-value>true</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>characterEncodingFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
- 开启属性注入,通过@ConfigurationProperties获取application.properties文件的配置属性,使用@autowired注入。
- 判断CharacterEncodingFilter对象是否交给spring托管
- 如果没有设置spring.http.encoding=enable(启用),默认设置为true,既条件符合
- 将characterEncodingFilter声明成bean托管给spring
- characterEncodingFilter不存在则创建
自动装配目的:不需要我们显示的声明bean,就可以通过@Autowired注入。
优点:
【入口类】:
springboot通常都会有一个*Application的入口类,当中会有一个main()。这个main()是标准的java应用入口方法。可以启动springboot应用项目。
@SpringBootApplication //1
public class SpringbootsimpleApplication{
public static void main(String[] args) { //2
SpringApplication.run(SpringbootsimpleApplication.class,args);
}
【web项目启动boot配置】:在项目的配置文件中增加如下类。类名必须是ServletInitializer。BigScreenApplication是springboot的应用入口方法。
public class ServletInitializer extends SpringBootServletInitializer{
@Override
protected SpringApplicationBuilderconfigure(SpringApplicationBuilder application) {
return application.sources(BigScreenApplication.class);
}
}
【@SpringBootApplication】:
springboot项目的核心注解,主要是开启自动配置。他是一个组合注解,主要组合了
· @ComponentScan(默认扫描路径是配置类所在的相同的包,因此@SpringBootApplication会自动扫描该类所在的同级包)
· @Configuration/@SpringBootConfiguration(声明一个配置文件)
· @EnableAutoConfiguration(根据路径中jar包依赖为当前项目进行自动配置)
事例:在pom.xml中添加了spring-boot-starter-web依赖,就会自动添加tomcat和springmvc的依赖。那么springBoot会对tomcat和servelet进行自动配置
也可以直接在入口类上使用@EnableAutoConfiguration
【@SpringBootApplication源码】:spring-boot-autoconfigure:1.5.6.RELEASE
【扫描路径@ComponentScan】:
【自动配置@EnableAutoConfiguration】:
实现自动装配的几要素:
@EnableAutoConfiguration源码核心功能是由@Import注解提供的。
org.springframework.boot.autoconfigure.EnableAutoConfigurationImportSelector会自动扫描具有META-INF/spring.factories文件下的jar包。这个文件声明了有哪些自动配置。
这些自动配置文件并不是一定会百分百的启动的。他们的每一个文件里面打开都会发现有
· @ConditionalOnClass(当类路径下有指定的类的条件下)
· @ConditionalOnProperty(指定属性是否有指定的值)
· @ConditionalOnNotWebApplication(当前项目不是web项目的条件下)
· @ConditionalOnMissingBean(当容器中没有这个bean的时候)
· .....
注入此类的众多注解,这些注解都是组合了@Conditional元注解(使用在类/方法上),只有符合条件(返回true/false)的情况下类才会被创建。使用该注解一定要实现Condition接口并且重写matches()。
springboot并没有直接实现Condition接口,而是对他进行了二次封装,获取了一个springbootCondittion接口,所有的条件bean都必须要实现该接口。
【eg:设置字符编码】:
spring:
在web.xml中需要配置字符过滤的filter。
配置字符过滤器需要满足2个条件:
1. CharacterEncodingFilter这个bean能配置
2. encoding和forceEncoding能够设置这两个参数
springboot: 已经自动为我们配置好了。
· 配置声明:
· 配置详情:
HttpEncodingAutoConfiguration判断需要装配的CharacterEncodingFilter是否已经被spring托管,根绝@ConditionalOnClass和@ConditionalOnMissingBean判断bean是否存在 若没有就创建。如有则忽略
HttpEncodingAutoConfiguration源码如下:
代码解释:
· HttpEncodingProperties配置文件绑定。
【代码解析】:
· 在application.properties或者application.yml设置字符编码的前缀是spring.http.encoding.
· 默认情况下是UTF-8。
总结:springboot的自动注入是根绝判断条件是否存在,在创建对象的。实现判断的是@Condition注解。扫描路径是有@componentScan决定的。
回复列表
关键字词:span,style,rgb,color,nbsp,li
上一篇:css常用属性
下一篇:js实现鼠标拖动滑块控制取值特效