简述
随着Spring Boot的流行,身为一个Java程序员怎么可以不会使用Spring-Boot-Starter呢?Spring Boot的自动装配原理是其核心注解@EnableAutoConfiguration里的@Import导入AutoConfigurationImportSelector.class,从而通过该类中SpringFactoriesLoader.loadFactoryNames方法扫描具有META-INF/spring.factories的jar包实现自动装配。
代码演示
需要引入如下依赖:
1 | <dependency> |
注意:spring boot版本不一致可能会导致问题。
首先定义一个配置类用于接收配置的参数类,“joy.hello”是prefix的值,代表获取joy.hello的值放入该类:
1 | "joy.hello") ( |
接下来模拟一个能自动装配的bean:
1 | public class HelloService { |
该类的作用其实可以理解为RedisTemplate一类的bean。
最后一步,也是最重要的一步,就是开启配置类并且指定其初始化条件:
1 |
|
首先,@Configuration
表示会将该类作为一个spring的配置类,@EnableConfigurationProperties
会开启对注解配置bean的支持,不然@ConfigurationProperties
会报错。@ConditionalOnClass
表示当项目中存在HelloService.class的时候才会自动装配,@ConditionalOnProperty
表示去判断joy.hello.enabled的值,如果为空,则返回true(matchIfMissing控制),如果不为空,则会去和havingValue的值比较,如果相当返回true否则为false。
最后,我们需要注册到META-INF/spring.factories里,内容如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\ com.joy.autoconfigure.HelloServiceAutoConfiguration
将项目打成jar包,新建一个spring boot项目,引入我们自定义的starter,然后在配置文件里即可定义joy.hello.msg的值:
1 | joy: |
启动该spring boot的启动类:
1 |
|
即可看到我们配置的值。
总结
官方推荐:
如果是spring官方包,推荐命名为spring-boot-starter-xxx的形式;
如果是第三方包,推荐命名为xxx-spring-boot-starter的形式,例如:mybatis-spring-boot-starter。
类似mybatis等的自动装配,跟上面代码类似:
1 |
|