如何封装springboot的starter

https://www.cnblogs.com/pain-first/p/11457933.html

https://www.jianshu.com/p/ee533e420ac5

 

如何封装springboot的starter(第一天)

 

--为啥要封装starter
--如何封装
--测试

为啥要封装starter

springboot的starter开箱即用,只需要引入依赖,就可以帮你自动装配bean,这样可以让开发者不需要过多的关注框架的配置。

如何封装

新建SpringBoot项目,引入以下依赖包到pom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-autoconfigure</artifactId>
</dependency>

ps: 官方的starter命名规范为:spring-boot-starter-{name}
非官方的starter命名规范为:{name}-spring-boot-starter

 

编写Service类


/**
 * 字符串拼接类
 */
public class WrapService extends WrapServiceProperties{

    private String str1;

    public WrapService(String str1){
        this.str1 = str1;
    }

    public String wrap(String newWord){
        return newWord + str1;
    }
}

编写配置文件读取类

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties("example.config")
public class WrapServiceProperties {

    private String str1;

    public String getStr1() {
        return str1;
    }

    public void setStr1(String str1) {
        this.str1 = str1;
    }
}

这里的“example.config”指的是application.xml或application.yml中配置的属性的前缀,WrapServiceProperties类里面的属性会拼接到前缀上,即是完整的配置,例如这里的配置就是 example.config.str1 = xxx

编写自动配置类

import com.tjm.service.WrapService;
import com.tjm.service.WrapServiceProperties;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
@ConditionalOnClass(WrapService.class)
@EnableConfigurationProperties(WrapServiceProperties.class)
public class AutoConfigure {

    @Autowired
    private WrapServiceProperties properties;

    @Bean
    @ConditionalOnMissingBean(WrapService.class)
    @ConditionalOnProperty(prefix = "example.show", value="enabled", havingValue = "true")
    WrapService starterService () {
        return new WrapService(properties.getStr1());
    }
}

对以上用到的注解解释下:

1. @ConditionalOnClass,当classpath下发现该类的情况下进行自动配置。  
2. @ConditionalOnMissingBean,当Spring Context中不存在该Bean时。  
3. @ConditionalOnProperty(prefix = "example.show",value = "enabled",havingValue = "true"),当配置文件中example.show.enabled=true时。

以下为SpringBoot中所有@Conditional注解和作用

@ConditionalOnBean:当容器中有指定的Bean的条件下  
@ConditionalOnClass:当类路径下有指定的类的条件下  
@ConditionalOnExpression:基于SpEL表达式作为判断条件  
@ConditionalOnJava:基于JVM版本作为判断条件  
@ConditionalOnJndi:在JNDI存在的条件下查找指定的位置  
@ConditionalOnMissingBean:当容器中没有指定Bean的情况下  
@ConditionalOnMissingClass:当类路径下没有指定的类的条件下  
@ConditionalOnNotWebApplication:当前项目不是Web项目的条件下  
@ConditionalOnProperty:指定的属性是否有指定的值  
@ConditionalOnResource:类路径下是否有指定的资源  
@ConditionalOnSingleCandidate:当指定的Bean在容器中只有一个,或者在有多个Bean的情况下,用来指定首选的Bean @ConditionalOnWebApplication:当前项目是Web项目的条件下  

添加spring.factories

在resource/META-INF/下面创建spring.factories文件,内容为:

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.tjm.springbootstartersample.AutoConfigure

至此已经完成starter的开发,运行 mvn:install 打包。

测试

引入starter依赖

<dependency>
            <groupId>com.ltc</groupId>
            <artifactId>sample-spring-boot-starter</artifactId>
            <version>0.0.1-SNAPSHOT</version>
            <scope>test</scope>
        </dependency>

修改配置文件

在application中添加以下配置:

example.show.enabled=true
example.config.str1=youxiu

使用JUnit进行单元测试

@Autowired
	private WrapService wrapService;
	
	@Test
	public void wrapServiceTest() {
		String str = wrapService.wrap("222222222333333333");
		System.out.println(str);
	}

输出:222222222333333333youxiu

好,开发的第一个starter完成~

参考:https://www.cnblogs.com/yuansc/p/9088212.html

  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值