spring boot微服务自定义starter原理详解
这篇文章主要介绍了springboot微服务自定义starter原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
使用springboot开发微服务后,工程的数量大大增加(一定要按照领域来切,不要一个中间件客户端包一个),让各个jar从开发和运行时自包含成了一个重要的内容之一。springbootstarter就可以用来解决该问题(没事启动时别依赖于applicationContext.getBean获取bean进行处理,依赖关系太折腾,有时候在复杂系统中解决此事比较麻烦,需要修改开源框架代码才能实现,反过来修改开源源码后,维护也是个麻烦事)。言归正传,说说自定义starter。首先请熟悉springboot的核心理念,不然容易为了starter而starter,这种情况太多了。
创建一个maven项目,在pom文件中添加如下依赖:
org.springframework.boot spring-boot-autoconfigure 2.0.0.RELEASE org.springframework.boot spring-boot-maven-plugin
创建properties属性类,用于读取属性(当然可选,如果一开始没有按照springbootautoconfig的套路来,改起来还是挺费劲的,但是一旦这么做了,就会想,TMD这才是真正的开发模式,@Value那套早该丢了)。
@ConfigurationProperties(prefix="com.xxx") publicclassHelloServiceProperties{ privateStringname="james"; privateStringhobby="cc"; publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicStringgetHobby(){ returnhobby; } publicvoidsetHobby(Stringhobby){ this.hobby=hobby; } }
@ConfigurationProperties配置此注解可以自动导入application.properties配置文件中的属性,前提需要指定属性前缀prefix。
3.创建配置类
publicclassHelloService{ privateStringname; privateStringhobby; publicStringgetName(){ return"nameis"+name; } publicStringgetHobby(){ return"hobbyis"+hobby; } publicvoidsetName(Stringname){ this.name=name; } publicvoidsetHobby(Stringhobby){ this.hobby=hobby; } }
4.创建自动配置类:
@Configuration @EnableConfigurationProperties(HelloServiceProperties.class) @ConditionalOnClass(HelloServiceConfiguration.class) @ConditionalOnProperty(prefix="com.xxx",value="enabled",matchIfMissing=true)@ComponentScan({"com.xxx"})//如果bean比较多,一般采用这种方式 publicclassHelloServiceAutoConfiguration{ @Autowired privateHelloServicePropertieshelloServiceProperties; @Bean//bean比较少、且顺序和逻辑有特殊要求的模块,一般采用这种方式 @ConditionalOnMissingBean(HelloServiceConfiguration.class) publicHelloServiceConfigurationhelloServiceConfiguration(){ HelloServicehelloService=newHelloService(); helloService.setName(helloServiceProperties.getName()); helloService.setHobby(helloServiceProperties.getHobby()); returnhelloService; } }
5.在resources文件夹下面新建一个META-INF文件,并在下面创建spring.factories文件,将4中的配置类进行注册。
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xxx.HelloServiceAutoConfiguration
6.新建一个springboot项目,在pom文件中添加刚刚打包的jar的坐标。
7.使用@Autowired访问接口。
@SpringBootApplication @RestController publicclassSpringboot03Application{ @Autowired privateHelloServicehelloService; publicstaticvoidmain(String[]args){ SpringApplication.run(Springboot03Application.class,args); } @RequestMapping("/name") publicStringgetName(){ returnhelloService.getName(); } @RequestMapping("/hobby") publicStringgetHobby(){ returnhelloService.getHobby(); } }
相比原来要使用@Import注解导入一个@Configuration类,或者在一处集中维护ComponentScan的所有路径,使用autoconfigurestarter可以让应用明显实现的更加自包含和解耦。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。