@SpringBootApplication核心注解

一、Spring Boot 基本认知

  1. 什么是springboot
    Springboot是对Spring系列众多框架的整合,一种全新的编程规范,算是框架中的框架。它简化了Spring众多框架的配置,可以很简单的就创建一个你可以运行的独立的、生产级别的应用系统。
    Springboot默认内置一个Tomcat ,不需要打war包,直接运行jar 即可运行。无需XML配置文件,springboot可以自动扫描包路径,转载并注入对象,并能做到根据 classpath 下jar包自动配置。

  2. 发展历史
    SpringBoot是近几年才发展是来的,主要是能快速开发微服务,适应当下对分布式的需求。2014年springboot开始崛起,进入springboot1.x 时代,以下是springboot版本变迁的主要特点:
    1.x xml时代
    2.x 业务注解,基础配置用xml
    3.x ,4.x java配置类
    5.x 响应式 异步编程时代

二、Spring Boot 核心注解
我们很多人接触第一次SpringBoot会用IDEA创建一个springboot 的web项目,写个HelloWord 就可以直接运行了。没有SpringMVC那么多配置。这是怎么做到的???

@SpringBootApplication
在项目的启动类中,都有这个注解:@SpringBootApplication ,该注解是springboot的核心注解。按住Ctrl,选中@SpringBootApplication 进入SpringBootApplication.class ;有两个注解@SpringBootConfiguration和 @EnableAutoConfiguration,以下主要讲解着两个注解类。

  1. @SpringBootConfiguration
    springboot的配置类注解,按住 Ctrl进入分析,会有一个@Configuration注解接口,@Configuration 表示该类是"配置类" 。当类@Configuration注解时,表示该类是配置类。这样我们就不需要在配置文件中写配置,而是被class类文件代替。有@Configuration注解,该类自动加入spring容器,由容器统一托管。

  2. @EnableAutoConfiguration
    在springMVC项目中,你一定会看到springMVC配置文件:spring.xml ,mybatis.xml等;为什么springboot不需要类似的配置文件,就可以自己运行?
    因为springboot可以自动配置,帮我们都自动配置好了,不需要我们自己手动配置,实现开箱即用的效果。这就是springboot的自动配置。
    而 @EnableAutoConfiguration注解springboot实现自动配置。

例子:

1.@AutoConfigurationPackage 将自动将需要的包及子包纳入spring容器中
		     通过getPackageName()方法
2.AutoConfigurationImportSelector   自动引入第三方依赖(jar包, 配置)
//纳入到扫描器scan
 public String[] selectImports(AnnotationMetadata annotationMetadata) {
        if (!this.isEnabled(annotationMetadata)) {
            return NO_IMPORTS;
        } else {
            AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);
            AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry = this.getAutoConfigurationEntry(autoConfigurationMetadata, annotationMetadata);
            return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());
        }
    }
总结:
   编写项目时,springMVC 需要手动在代码中对三方依赖进行配置,但是springboot可以自动进行配置
   a. 自己写的代码,@SpringBootConfiguration会扫描配置 ,纳入Spring容器,实现自动配置。
   b. 第三方依赖的jar或配置 
      @EnableAutoConfiguration 会自动配置 不需要自己写spring.xml ,mybatis.xml等配置文件 。

三、如何自动装配
HttpEncodingAutoConfiguration 类
@Configuration :是一个配置类,将此类纳入Spring容器
@EnableConfigurationProperties(HttpEncodingProperties.class) 通过HttpEncodingProperties编码设置成UTF-8(即可自动装配)
如何修改:HttpEncodingProperties
在application.propreties 中 spring.http.encoding.charset=utf-16
prefix + 属性名 ==》引出 配置文件来源:各人文件的prefix

  配置文件执行的条件:  @Conditional 条件
    @ConditionalOnWebApplication      是web应用
	@ConditionalOnClass(CharacterEncodingFilter.class)    项目中存在CharacterEncodingFilter该类
	@ConditionalOnProperty(prefix = "spring.http.encoding", value = "enabled", matchIfMissing = true)
	
	@Bean
	@ConditionalOnMissingBean(CharacterEncodingFilter.class)
	public CharacterEncodingFilter characterEncodingFilter() {
		CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();
		filter.setEncoding(this.properties.getCharset().name());
		filter.setForceRequestEncoding(this.properties.shouldForce(Type.REQUEST));
		filter.setForceResponseEncoding(this.properties.shouldForce(Type.RESPONSE));
		return filter;
	}
    将该方法配置 ,@Bean 纳入spring 容器中,使方法生效

 总结:  Configuration 有很多条件,@Conditional当这些条件都满足时,自动装配生效
        可以通过yml properties 的文件修改, ‘prefix的值 + 属性名’  修改配置
发布了16 篇原创文章 · 获赞 3 · 访问量 538

猜你喜欢

转载自blog.csdn.net/outdata/article/details/100750936