1、根据条件来装配bean,SpringBoot的自动配置,根据条件进行自动配置。

首先创建一个接口,如下所示:

package com.bie.encoding;

/**
*
* @Description TODO
* @author biehl
* @Date 2018年12月31日 上午10:57:07
*
*/ public interface EncodingConvert { }

然后创建两个实现类,这个只是举例说明了其功能,举得字符编码的栗子:

package com.bie.encoding;

/**
*
* @Description TODO
* @author biehl
* @Date 2018年12月31日 上午10:56:46
*
*/ public class GBKEncodingConvert implements EncodingConvert{ }
package com.bie.encoding;

/**
*
* @Description TODO
* @author biehl
* @Date 2018年12月31日 上午10:56:58
*
*/ public class UTF8EncodingConvert implements EncodingConvert{ }

将GBK和UTF8的类进行装配:

实现了Condition接口的类也添加了,自己可以进行对比操作。

基于条件的自动装配,一般配合Condition接口一起使用,只有接口的实现类返回true,才装配,否则不装配。它可以用在方法上面,则直怼方法起作用,还可以用在类上面,则对该类下面的所有方法起作用。

@Conditional的参数值是一个数组,所以可以传递多个值进去,这样只有当所有都返回true的时候才会执行。否则不执行。

 package com.bie.encoding;

 import org.springframework.boot.SpringBootConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Conditional; /**
*
* @Description TODO
* @author biehl
* @Date 2018年12月31日 上午11:05:22
*
*/
@SpringBootConfiguration //@SpringBootConfiguration和@Configuration作用和效果一样的
public class EncodingConvertConfiguration { /**
* 装配
* @return
*/
@Bean
@Conditional(UTF8Condition.class)
public EncodingConvert createUTF8EncodingConvert() {
return new UTF8EncodingConvert();
} /**
* 装配
* @return
*/
@Bean
@Conditional(GBKCondition.class)
public EncodingConvert createGBKEncodingConvert() {
return new GBKEncodingConvert();
} }

然后可以写一个主类,不自动装配看看效果如何,然后装配了效果如何:

 package com.bie;

 import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext; import com.bie.encoding.EncodingConvert; /**
*
* @Description TODO
* @author biehl
* @Date 2018年12月31日 上午11:08:47
*
*/
@SpringBootApplication
public class EncodingConvertApplication { public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(EncodingConvertApplication.class, args);
//未装配的现象,将gbk和utf8都打印输出
//装配的现象是,只输出了utf8的
String encoding = System.getProperty("file.encoding");
System.out.println("encoding : " + encoding);
System.out.println(context.getBeansOfType(EncodingConvert.class)); //关闭
context.close();
} }

下面将实现Condition接口的实现类,来实现SpringBoot的自动装配:

package com.bie.encoding;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata; /**
*
* @Description TODO
* @author biehl
* @Date 2018年12月31日 上午11:16:09
* 1、true表示装配,false表示不装配。
*/ public class UTF8Condition implements Condition{ @Override
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String encoding = System.getProperty("file.encoding");
if(encoding != null) {
return "utf-8".equals(encoding.toLowerCase());
}
//true表示装配,false表示不装配。
return false;
} }
package com.bie.encoding;

import org.springframework.context.annotation.Condition;
import org.springframework.context.annotation.ConditionContext;
import org.springframework.core.type.AnnotatedTypeMetadata; /**
*
* @Description TODO
* @author biehl
* @Date 2018年12月31日 上午11:13:13
* 1、true表示装配,false表示不装配。
*/ public class GBKCondition implements Condition{ /**
*
*/
public boolean matches(ConditionContext context, AnnotatedTypeMetadata metadata) {
String encoding = System.getProperty("file.encoding");
if(encoding != null) {
return "gbk".equals(encoding.toLowerCase());
}
//true表示装配,false表示不装配。
return false;
} }

运行效果如下所示:

SpringBoot的自动装配的类可以查看源码,位置如下所示:

待续......

SpringBoot的自动配置的更多相关文章

  1. springboot(六)自动配置原理和@Conditional

    官方参考的配置属性:https://docs.spring.io/spring-boot/docs/current-SNAPSHOT/reference/htmlsingle/#common-appl ...

  2. springboot mvc自动配置(一)自动配置DispatcherServlet和DispatcherServletRegistry

    所有文章 https://www.cnblogs.com/lay2017/p/11775787.html 正文 springboot的自动配置基于SPI机制,实现自动配置的核心要点就是添加一个自动配置 ...

  3. springboot mvc自动配置(三)初始化mvc的组件

    所有文章 https://www.cnblogs.com/lay2017/p/11775787.html 正文 在springboot mvc自动配置的时候,获得了DispatcherServlet和 ...

  4. 关于SpringBoot的自动配置和启动过程

    一.简介 Spring Boot简化了Spring应用的开发,采用约定大于配置的思想,去繁从简,很方便就能构建一个独立的.产品级别的应用. 1.传统J2EE开发的缺点 开发笨重.配置繁多复杂.开发效率 ...

  5. 面试题: SpringBoot 的自动配置原理

    个人博客网:https://wushaopei.github.io/    (你想要这里多有) 3.Spring Boot 的自动配置原理 package com.mmall; import org. ...

  6. spring-boot spring-MVC自动配置

    Spring MVC auto-configuration Spring Boot 自动配置好了SpringMVC 以下是SpringBoot对SpringMVC的默认配置:==(WebMvcAuto ...

  7. Springboot MVC 自动配置

    Springboot MVC 自动配置 官方文档阅读 https://docs.spring.io/spring-boot/docs/current/reference/html/web.html#w ...

  8. SpringBoot的自动配置原理

    一.入口 上篇注解@SpringBootApplication简单分析,说到了@SpringBootApplication注解的内部结构, 其中@EnableAutoConfiguration利用En ...

  9. SpringBoot的自动配置原理过程解析

    SpringBoot的最大好处就是实现了大部分的自动配置,使得开发者可以更多的关注于业务开发,避免繁琐的业务开发,但是SpringBoot如此好用的 自动注解过程着实让人忍不住的去了解一番,因为本文的 ...

随机推荐

  1. MT 【331】两元非齐次不等式

    若正实数$x,y$满足$x^3+y^3=(4x-5y)y$ 则 $y$ 的最大值为____ 解答:$x^3+y^3+y^2=4(x-y)y\le x^2$,故$y^3+y^2=x^2-x^3=\dfr ...

  2. OpenLayers学习笔记(十)— 动态加载JSON数据模拟航迹线

    在openlayers 3 上,加载本地json数据,动态绘制航迹线,以飞机当前位置为地图中心,此例子是模拟DEMO 本文链接:动态加载JSON数据模拟航迹线 作者:狐狸家的鱼 GitHub:八至 前 ...

  3. dsu on tree 树上启发式合并 学习笔记

    近几天跟着dreagonm大佬学习了\(dsu\ on\ tree\),来总结一下: \(dsu\ on\ tree\),也就是树上启发式合并,是用来处理一类离线的树上询问问题(比如子树内的颜色种数) ...

  4. IIS8的SNI功能实现同一服务器多HTTPS站点

    名词解释: SNI指是一项用于改善SSL/TLS的技术,在SSLv3/TLSv1中被启用.它允许客户端在发起SSL握手请求时(具体说来,是客户端发出SSL请求中的ClientHello阶段),就提交请 ...

  5. (模拟 打好基础)nyoj1363-计划日

    1363-计划日 内存限制:256MB 时间限制:3000ms 特判: No通过数:21 提交数:79 难度:1 题目描述: 为什么花那么多时间.精力还是学不好学不通,如何把握各科目的重难点,期中和期 ...

  6. Springboot集成Spring Batch

    Spring官网 (https://spring.io/projects/spring-batch#overview)对Spring  Batch的解释: 一个轻量级的.全面的批处理框架,用于开发对企 ...

  7. 扩展欧几里得(exgcd)与同余详解

    exgcd入门以及同余基础 gcd,欧几里得的智慧结晶,信息竞赛的重要算法,数论的...(编不下去了 讲exgcd之前,我们先普及一下同余的性质: 若,那么 若,,且p1,p2互质, 有了这三个式子, ...

  8. zipline-- 开发指南

    Development Guidelines开发指南This page is intended for developers of Zipline, people who want to contri ...

  9. matlab 图像设置

    Matlab画图设置线宽和字号 既然这么多人来这里看过,我就多做点注释,方便大家参考. 下边这段代码不需要特别设置,只需要在plot语句之后插入即可. %plot your figure before ...

  10. Servlet处理Json请求数据包

    request.setCharacterEncoding('UTF-8'); response.setContentType('text/html;charset=UTF-8'); String ac ...