首先,上代码,自己写一个基本的自动配置
业务如下:如果没有配置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
代码写完了,根据代码流程,下面解释一下自动配置的原理: