Promise Filter 摩尔投票法 springcloud Jetson Nano dedecms Java中高进阶架构 智慧树 email constructor angularjs视频教程 jquery对象 jquery触发change事件 hadoop源码 spark数据清洗 css面试题 mysql 连接 python加注释 python多线程编程 python写脚本 python变量类型 python零基础教程 java编程环境 java的基本数据类型 如何安装java环境 java怎么写接口 java数组转集合 java中string的方法 java日期转时间戳 js四舍五入 手机主题之家 系统工具箱 磁芯大战 预测未来长相的软件 python字符串 cdr怎么填充颜色 js压缩图片 外星人r7 华为悦盒怎么用 破天螺旋
当前位置: 首页 > 学习教程  > 编程语言

SpringBoot:自动装配

2021/1/28 22:34:39 文章标签:

yaml注入配置文件 原来实体是使用value来注入的,现在用yaml配置的方式进行注入 /*ConfigurationProperties作用:将配置文件中配置的每一个属性的值,映射到这个组件中;告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进…

yaml注入配置文件

原来实体是使用@value来注入的,现在用yaml配置的方式进行注入

/*@ConfigurationProperties作用:将配置文件中配置的每一个属性的值,映射到这个组件中;告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定参数 prefix = “person” : 将配置文件中的person下面的所有属性一一对应*/@Component //注册bean@ConfigurationProperties(prefix = "person")public class Person {    private String name;}

加载指定的配置文件

@PropertySource :加载指定的配置文件;(还是要用@value)

@configurationProperties:默认从全局配置文件中获取值;

Image

分析自动配置原理

//表示这是一个配置类,和以前编写的配置文件一样,也可以给容器中添加组件;@Configuration 
//启动指定类的ConfigurationProperties功能;  //进入这个HttpProperties查看,将配置文件中对应的值和HttpProperties绑定起来;  //并把HttpProperties加入到ioc容器中 自动配置属性@EnableConfigurationProperties({HttpProperties.class}) 
//Spring底层@Conditional注解  //根据不同的条件判断,如果满足指定的条件,整个配置类里面的配置就会生效  //这里的意思就是判断当前应用是否是web应用,如果是,当前配置类生效@ConditionalOnWebApplication(    type = Type.SERVLET)
//判断当前项目有没有这个类CharacterEncodingFilter;SpringMVC中进行乱码解决的过滤器;@ConditionalOnClass({CharacterEncodingFilter.class})
//判断配置文件中是否存在某个配置:spring.http.encoding.enabled;  //如果不存在,判断也是成立的  //即使我们配置文件中不配置pring.http.encoding.enabled=true,也是默认生效的;@ConditionalOnProperty(    prefix = "spring.http.encoding",    value = {"enabled"},    matchIfMissing = true)
public class HttpEncodingAutoConfiguration {    //他已经和SpringBoot的配置文件映射了    private final Encoding properties;    //只有一个有参构造器的情况下,参数的值就会从容器中拿    public HttpEncodingAutoConfiguration(HttpProperties properties) {        this.properties = properties.getEncoding();    }    //给容器中添加一个组件,这个组件的某些值需要从properties中获取    @Bean    @ConditionalOnMissingBean //判断容器没有这个组件?    public CharacterEncodingFilter characterEncodingFilter() {        CharacterEncodingFilter filter = new OrderedCharacterEncodingFilter();        filter.setEncoding(this.properties.getCharset().name());        filter.setForceRequestEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.REQUEST));        filter.setForceResponseEncoding(this.properties.shouldForce(org.springframework.boot.autoconfigure.http.HttpProperties.Encoding.Type.RESPONSE));        return filter;    }    //。。。。。。。}

一句话总结 :根据当前不同的条件判断,决定这个配置类是否生效!

  • 一但这个配置类生效;这个配置类就会给容器中添加各种组件;

  • 这些组件的属性是从对应的properties类中获取的,这些类里面的每一个属性又是和配置文件绑定的;

  • 所有在配置文件中能配置的属性都是在xxxxProperties类中封装着;

  • 配置文件能配置什么就可以参照某个功能对应的这个属性类

//从配置文件中获取指定的值和bean的属性进行绑定@ConfigurationProperties(prefix = "spring.http") public class HttpProperties {    // .....}

小结

1、SpringBoot启动会加载大量的自动配置类

2、我们看我们需要的功能有没有在SpringBoot默认写好的自动配置类当中;

3、我们再来看这个自动配置类中到底配置了哪些组件;(只要我们要用的组件存在在其中,我们就不需要再手动配置了)

4、给容器中自动配置类添加组件的时候,会从properties类中获取某些属性。我们只需要在配置文件中指定这些属性的值即可;

在yml能配置的东西,一定有一个固有的规律:

xxxxAutoConfigurartion:自动配置类,帮我们自动装配东西/给容器中添加组件;

xxxxProperties:封装配置文件中相关属性,和配置文件绑定;这样我们就能用yml等自定义的配置。

 

 

 

 

 

 

 

 

 


本文链接: http://www.dtmao.cc/news_show_650024.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?