SpringBoot中的自定义starter

 更新时间:2024年01月02日 10:48:01   作者:my_sky_  
这篇文章主要介绍了SpringBoot中的自定义starter,Starter是Spring Boot中的一个非常重要的概念,Starter相当于模块,它能将模块所需的依赖整合起来并对模块内的Bean根据环境(条件)进行自动配置,需要的朋友可以参考下

自定义starter

所谓的 starter ,其实就是一个普通的 Maven 项目。

1、首先创建一个普通的 Maven 项目

引入自动化配置依赖:

<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-autoconfigure</artifactId>
	<version>2.1.8.RELEASE</version>
	<!-- 表明不传递spring-boot-autoconfigure依赖 -->
    <optional>true</optional>
</dependency>

注意:在自定义的starter 的pom中,将spring-boot-autoconfigure的maven依赖声明为<optional>true</optional>,表明自定义的starter的jar包不会传递spring-boot-autoconfigure依赖;否则会将spring-boot-autoconfigure版本固定,导致引用自定义starter的应用出现版本冲突问题。

starter命名模式 --> ${module}-spring-boot-starter;

例如:

<groupId>com.hello</groupId>
<artifactId>helloService-spring-boot-starter</artifactId>
<version>0.0.1-SNAPSHOT</version>

2、创建一个配置类

创建一个配置类 HelloProperties 来接受 application.properties 中注入的值:

@ConfigurationProperties(prefix = "javaboy")
public class HelloProperties {
	privatestaticfinal String DEFAULT_NAME = "默认名";
	privatestaticfinal String DEFAULT_MSG = "默认消息";
	private String name = DEFAULT_NAME;
	private String msg = DEFAULT_MSG;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
}

3、创建一个服务类 HelloService

public class HelloService {
	private String msg;
	private String name;
	public String sayHello() {
		return name + " say " + msg + " !";
	}
	public String getMsg() {
		return msg;
	}
	public void setMsg(String msg) {
		this.msg = msg;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}

4、自定义自动配置类

SpringBoot自动装配的命名规则:

  • 自动装配类应命名为:XxxAutoConfiguration;
  • 自动装配package命名模式: ${root-package}.autoconfigure.${module-package},比如:
org.springframework.boot.autoconfigure.aop.AopAutoConfiguration
@Configuration
@EnableConfigurationProperties(HelloProperties.class)
@ConditionalOnClass(HelloService.class)
public class HelloServiceAutoConfiguration {
	@Autowired
	HelloProperties helloProperties;
	@Bean
	HelloService helloService() {
		HelloService helloService = new HelloService();
		helloService.setName(helloProperties.getName());
		helloService.setMsg(helloProperties.getMsg());
		return helloService;
	}
}

注解 @EnableConfigurationProperties 使我们之前配置的 @ConfigurationProperties 生效,让配置的属性注入到 Bean 中。

注解 @ConditionalOnClass 表示当项目的 classpath 下存在 HelloService 时,后面的配置才生效。

5、创建 spring.factories 文件

在resources目录下新建 META-INF/spring.factories 文件:

org.springframework.boot.autoconfigure.EnableAutoConfiguration = \
com.hello.autoconfigure.HelloServiceAutoConfiguration

这里的key是固定的,value是我们的自动配置类的全路径。

SpringBoot 项目启动时,会做自动配置,会去扫描所有jar包中的 META-INF/spring.factories 配置文件。

至此,自定义的starter已完成。将这个自动化配置类的项目安装到maven仓库中,然后在其他项目中引入依赖就可以使用。

新建一个普通的 Spring Boot 工程,并加入我们自定义的 starter 的依赖:

<dependency>
	<groupId>com.hello</groupId>
	<artifactId>helloService-spring-boot-starter</artifactId>
	<version>0.0.1-SNAPSHOT</version>
</dependency>

此时我们项目中已有一个 helloService 实例可以使用,而且我们还可以配置它的属性数据,例如,在 application.properties 中配置:

javaboy.name=我的名字
javaboy.msg=提示消息

我们做个单元测试:

@RunWith(SpringRunner.class)
@SpringBootTest
public class MystarterApplicationTest {
	@Autowired
	private HelloService helloService;
	@Test
	public void contextLoads() {
		System.out.println(helloService.sayHello());
	}
}

控制台会打印:

我的名字 say 提示消息 !

到此这篇关于SpringBoot中的自定义starter的文章就介绍到这了,更多相关自定义starter内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • SpringBoot中创建的AOP不生效的原因及解决

    SpringBoot中创建的AOP不生效的原因及解决

    这篇文章主要介绍了SpringBoot中创建的AOP不生效的原因及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-11-11
  • Java中Spring Boot+Socket实现与html页面的长连接实例详解

    Java中Spring Boot+Socket实现与html页面的长连接实例详解

    这篇文章主要介绍了Java中Spring Boot+Socket实现与html页面的长连接实例详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • 使用ANT与YUI压缩js的实现方法

    使用ANT与YUI压缩js的实现方法

    本篇文章是对使用ANT与YUI压缩js的实现方法进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • spring中的ObjectPostProcessor详解

    spring中的ObjectPostProcessor详解

    这篇文章主要介绍了spring中的ObjectPostProcessor详解,Spring Security 的 Java 配置不会公开其配置的每个对象的每个属性,这简化了大多数用户的配置,毕竟,如果每个属性都公开,用户可以使用标准 bean 配置,需要的朋友可以参考下
    2024-01-01
  • Java LinkedList实现班级信息管理系统

    Java LinkedList实现班级信息管理系统

    这篇文章主要为大家详细介绍了Java LinkedList实现班级信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Java实现银行账户管理子系统

    Java实现银行账户管理子系统

    这篇文章主要为大家详细介绍了Java实现银行账户管理子系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • Shiro+Redis实现登录次数冻结的示例

    Shiro+Redis实现登录次数冻结的示例

    这篇文章主要介绍了Shiro+Redis实现登录次数冻结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • 解决MyBatis中为类配置别名,列名与属性名不对应的问题

    解决MyBatis中为类配置别名,列名与属性名不对应的问题

    这篇文章主要介绍了解决MyBatis中为类配置别名,列名与属性名不对应的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • httpclient的CPool定义方法详解

    httpclient的CPool定义方法详解

    这篇文章主要为大家介绍了httpclient的CPool定义方法详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • mybatis-plus批量更新太慢该如何解决详解

    mybatis-plus批量更新太慢该如何解决详解

    这篇文章主要给大家介绍了关于mybatis-plus批量更新太慢该如何解决的相关资料,文中通过实例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2023-03-03

最新评论