springboot2-自定义一个starter

创建一个auto-configuration

理解 auto-configuration

auto-configuration实际也是通过标准的**@Configuration** 类实现的,同时通过 @Conditional 注解来控制何时启用,通常会使用 @ConditionalOnClass@ConditionalOnMissingBean注解,这样能确保发现关键的类存在时并且你没有定义自己相关的@Configuration时启用自动配置。

查找自动配置的类

​ springboot 会检查发布的jar包中是否含有 META-INF/spring.factories文件,并且该文件应该在 EnableAutoConfiguration下列出自定义的配置类:

# Auto Configure
org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
org.springframework.boot.autoconfigure.admin.SpringApplicationAdminJmxAutoConfiguration,\
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration,\
org.springframework.boot.autoconfigure.amqp.RabbitAutoConfiguration,\

说明:自动配置必须以这种形式加载,确保可以在特定的包下定义配置类,并且绝不让他们作为组件扫描的目标。自动配置的类也不应该启用组件扫描查找其他的组件。

如果你定义的配置类需要应用在特定的顺序可以使用 @AutoConfigureAfter@AutoConfigureBefore注解。

@Conditional 注解

​ 自动配置类上通常会包含一个或者多个 @Conditional 注解,包含如下注解:

@ConditionalOnClass、@ConditionalOnMissingClass
@Configuration
// Some conditions
public class MyAutoConfiguration {

	// Auto-configured beans

	@Configuration
	@ConditionalOnClass(EmbeddedAcmeService.class)
	static class EmbeddedConfiguration {

		@Bean
		@ConditionalOnMissingBean
		public EmbeddedAcmeService embeddedAcmeService() { ... }

	}

}
@ConditionalOnBean、@ConditionalOnMissingBean
@Configuration
public class MyAutoConfiguration {

	@Bean
	@ConditionalOnMissingBean
	public MyService myService() { ... }

}

说明:以上标识myService bean将被创建,如果ApplicationContext中没有发现MyService类型的bean时;

@ConditionalOnProperty
  • @ConditionalOnProperty基于spring环境的属性配置决定配置类是否该被包含;
ConditionalOnResource
  • 如果某个特定的资源存在 决定是否包含此配置类
@ConditionalOnWebApplication、@ConditionalOnNotWebApplication
  • 看是否是 web aplication决定是否包含此配置类
@ConditionalOnExpression
  • 依赖SpEL表达式的结果决定是否包含此配置类

创建一个starter

整体原则:

一个完整的springboot starter包含如下内容:

  1. 一个自动配置模块儿,包含自动配置代码;
  2. 一个starter模块儿,提供了自动配置模块儿的依赖和一些他所依赖的其他的外部依赖;

总而言之,一个starter应该提供能使他启用的所依赖的所有东西。如果不想讲两者分开也可以将 ````auto-configuration code and the dependency management ```包含在一个模块儿里。

具体要求

1. name

应该为你的starter起一个合适的名字,不要以spring-boot开头,甚至用一个不同的groupId。

2. 自动配置模块儿

自动配置模块儿包含了starter启用所依赖的一切,包含配置属性的定义例如:ConfigurationProperties,还有一些回调接口用于自定义组件的启动形式。

同时官方建议标记自动配置模块儿的依赖为可选择的,以便于在项目里友好的引用此自动配置模块儿。

springboot使用一个注解处理器从一个元文件中收集自动配置类启用的条件(META-INF/spring-autoconfigure-metadata.properties),如果提供这个文件将提高启动时间,官方建议增加如下的依赖在自动配置模块儿;

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-autoconfigure-processor</artifactId>
	<optional>true</optional>
</dependency>
3. starter模块儿

starter模块儿实际上是一个空jar,它仅仅提供一些必要的依赖。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值