首先,上代码,自己写一个基本的自动配置
业务如下:如果没有配置xty-message.message这个字段,给用户显示"hello world",如果配置了,给用户显示"hello "+配置的字符串。
下面是基本步骤
第一步:创建一个配置属性类
这个类就是用于自己配置字符串的。
import org.springframework.boot.context.properties.ConfigurationProperties; /** * @Description: 第一步:创建一个配置属性类 * 需求:自定义配置一个字符串,如果配置了,浏览器打印配置的字符串,否则打印默认字符串。hello world! * @Author: Tianyu Xiao * @CreateDate: 2019/5/26 20:38 */ @ConfigurationProperties(prefix = "xty-message") public class MessageProperties { private String message = "world!"; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }第二步:创建一个接收自动配置的字符串的bean
这个bean先不要自己注入到spring容器中,交由下面说的config类管理,config类将它注入spring中
/** * @Description:第二步:创建一个功能的Bean * @Author: Tianyu Xiao * @CreateDate: 2019/5/26 21:07 */ public class MessageAutoComponent { private String message = null; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String getAutoMessage() { String msg = "hello " +message; return msg; } }第三步:创建一个Config类,用于自定义配置
/** * @Description:第三步:创建自动配置类,自动配置代码 * @Author: Tianyu Xiao * @CreateDate: 2019/5/26 20:44 */ @Configuration @EnableConfigurationProperties(MessageProperties.class)//这个注解读入我们的配置对象类 @ConditionalOnClass(MessageAutoComponent.class)//当类路径存在这个类时才会加载这个配置类,否则跳过,这个很有用比如不同jar包间类依赖,依赖的类不存在直接跳过,不会报错 public class MessageAutoConfig { @Autowired private MessageProperties messageProperties; @Bean @ConditionalOnMissingBean(MessageAutoComponent.class) public MessageAutoComponent getMessageProperties() { MessageAutoComponent component = new MessageAutoComponent(); component.setMessage(messageProperties.getMessage()); return component; } }第四步:创建一个controller来测试
/** * @Description:第四步:根据自动配置创建一个测试类 * @Author: Tianyu Xiao * @CreateDate: 2019/5/26 20:46 */ @RestController public class MessageAutoController { @Autowired private MessageAutoComponent component; @GetMapping(value = "/auto/config/message") public String getAutoMessage() { return component.getAutoMessage(); } }(1)在application.xml不配置xty-message.message=xtyxty的话:输出hello world
(2)在application.xml不配置xty-message.message=xtyxty的话:输出hello xtyxty
代码写完了,根据代码流程,下面解释一下自动配置的原理: