首先,上代碼,自己寫一個基本的自動配置
業務如下:如果沒有配置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
代碼寫完了,根據代碼流程,下面解釋一下自動配置的原理: