Springboot自动配置原理

首先,上代码,自己写一个基本的自动配置

业务如下:如果没有配置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

 

代码写完了,根据代码流程,下面解释一下自动配置的原理:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章