GITHUB地址:https://github.com/zhangboqing/springboot-learning

 

一、Spring Boot自动配置原理

  自动配置功能是由@SpringBootApplication中的@EnableAutoConfiguration注解提供的。

 1 @Target(ElementType.TYPE)
 2 @Retention(RetentionPolicy.RUNTIME)
 3 @Documented
 4 @Inherited
 5 @AutoConfigurationPackage
 6 @Import(AutoConfigurationImportSelector.class)
 7 public @interface EnableAutoConfiguration {
 8 
 9     String ENABLED_OVERRIDE_PROPERTY = "spring.boot.enableautoconfiguration";
10 
11     /**
12      * Exclude specific auto-configuration classes such that they will never be applied.
13      * @return the classes to exclude
14      */
15     Class<?>[] exclude() default {};
16 
17     /**
18      * Exclude specific auto-configuration class names such that they will never be
19      * applied.
20      * @return the class names to exclude
21      * @since 1.3.0
22      */
23     String[] excludeName() default {};
24 
25 }

  这里的关键功能是@Import(AutoConfigurationImportSelector.class),它导入了AutoConfigurationImportSelector类,该类使用了SpringFactoriesLoader.loadFactoryNames方法来扫描具有META-INF/spring.factories文件的jar包。

1 protected List<String> getCandidateConfigurations(AnnotationMetadata metadata,
2             AnnotationAttributes attributes) {
3         List<String> configurations = SpringFactoriesLoader.loadFactoryNames(
4                 getSpringFactoriesLoaderFactoryClass(), getBeanClassLoader());
5         Assert.notEmpty(configurations,
6                 "No auto configuration classes found in META-INF/spring.factories. If you "
7                         + "are using a custom packaging, make sure that file is correct.");
8         return configurations;
9     }

  并且在META-INF/spring.factories中定义了需要自动配置的具体类是什么

1 org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
2   com.zbq2.autoconfig.HelloServiceAutoConfiguration

 

二、如何实现自动配置功能

1.新建stater maven项目
增加Spring Boot自身的自动配置maven依赖
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-autoconfigure -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>
<version>2.0.3.RELEASE</version>
</dependency>

2.属性配置
HelloServiceProperties
自定义一个获取属性的类,可以获取在application.properties中设置的自定义属性

 1 /**
 2  * @author zhangboqing
 3  * @date 2018/6/29
 4  */
 5 @Data
 6 @ConfigurationProperties(prefix = "hello")
 7 public class HelloServiceProperties {
 8 
 9     private static final String MSG = "world";
10 
11     private String msg = MSG;
12 }
View Code

相关文章:

  • 2021-04-15
  • 2021-08-01
  • 2022-12-23
  • 2021-08-22
  • 2021-07-15
  • 2021-10-30
猜你喜欢
  • 2018-09-05
  • 2021-06-08
  • 2022-12-23
  • 2022-02-03
  • 2021-08-22
  • 2022-02-07
相关资源
相似解决方案