spring boot微服务自定义starter原理详解

网友投稿 271 2022-12-19


spring boot微服务自定义starter原理详解

这篇文章主要介绍了spring boot微服务自定义starter原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

使用spring boot开发微服务后,工程的数量大大增加(一定要按照领域来切,不要一个中间件客户端包一个),让各个jar从开发和运行时自包含成了一个重要的内容之一。spring boot starter就可以用来解决该问题(没事启动时别依赖于applicationContext.getBean获取bean进行处理,依赖关系太折腾,有时候在复杂系统中解决此事比较麻烦,需要修改开源框架代码才能实现,反过来修改开源源码后,维护也是个麻烦事)。言归正传,说说自定义starter。首先请熟悉spring boot的核心理念,不然容易为了starter而starter,这种情况太多了。

创建一个maven项目,在pom文件中添加如下依赖:

org.springframework.boot

spring-boot-autoconfigure

2.0.0.RELEASE

org.springframework.boot

spring-boot-maven-plugin

创建properties属性类,用于读取属性(当然可选,如果一开始没有按照spring boot autoconfig的套路来,改起来还是挺费劲的,但是一旦这么做了,就会想,TMD这才是真正的开发模式,@Value那套早该丢了)。

@ConfigurationProperties(prefix = "com.xxx")

public class HelloServiceProperties {

private String name = "james";

private String hobby = "cc";

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getHobby() {

return hobby;

}

public void setHobby(String hobby) {

this.hobby = hobby;

}

}

@ConfigurationProperties配置此注解可以自动导入application.properties配置文件中的属性,前提需要指定属性前缀prefix。

3.创建配置类

public class HelloService {

private String name;

private String hobby;

public String getName() {

return "name is " + name;

}

public String getHobby() {

return "hobby is " + hobby;

}

public void setName(String name) {

this.name = name;

}

public void setHobby(String hobby) {

this.hobby = hobby;

}

}

4.创建自动配置类:

@Configuration

@EnableConfigurationProperties(HelloServiceProperties.class)

@ConditionalOnClass(HelloServiceConfiguration.class)

@ConditionalOnProperty(prefix = "com.xxx", value = "enabled", matchIfMissing = true)@ComponentScan({"com.xxx"}) // 如果bean比较多,一般采用这种方式

public class HelloServiceAutoConfiguration {

@Autowired

private HelloServiceProperties helloServiceProperties;

@Bean // bean比较少、且顺序和逻辑有特殊要求的模块,一般采用这种方式

@ConditionalOnMissingBean(HelloServiceConfiguration.class)

public HelloServiceConfiguration helloServiceConfiguration() {

HelloService helloService = new HelloService();

helloService.setName(helloServiceProperties.getName());

helloService.setHobby(helloServiceProperties.getHobby());

return helloService;

}

}

5.在resources文件夹下面新建一个META-INF文件,并在下面创建spring.factories文件,将4中的配置类进行注册。

org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xxx.HelloServiceAutoConfiguration

6.新建一个springboot项目,在pom文件中添加刚刚打包的jar的坐标。

7.使用@Autowired访问接口。

@SpringBootApplication

@RestController

public class Springboot03Application {

@Autowired

private HelloService helloService;

public static void main(String[] args) {

SpringApplication.run(Springboot03Application.class, args);

}

@RequestMapping("/name")

public String getName() {

return helloService.getName();

}

@RequestMapping("/hobby")

public String getHobby() {

return helloService.getHobby();

}

}

相比原来要使用@Import注解导入一个@Configuration类,或者在一处集中维护ComponentScan的所有路径,使用autoconfigure starter可以让应用明显实现的更加自包含和解耦。


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:spring boot中的条件装配bean的实现
下一篇:Spring @Conditional注解讲解及示例详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~