springstarter(springstarterjar重复)
本篇文章给大家谈谈springstarter,以及springstarterjar重复对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、只需4步,自己搞个 Spring Boot Starter !
- 2、springboot starter 原理解析及实践
- 3、自定义Spring starter
- 4、面试官:如何手写一个Spring Boot Starter?
- 5、自定义SpringBoot Starter 通过注解启动装配
只需4步,自己搞个 Spring Boot Starter !
只要你用Springboot,一定会用到各种spring-boot-starter。其实写一个spring-boot-starter,仅需4步。下面我们就写一个starter,它将实现,在日志中打印方法执行时间。
在使用spring-boot-starter,会发现,有的项目名称是 XX-spring-boot-starter,有的是spring-boot-starter-XX,这个项目的名称有什么讲究呢?从springboot官方文档摘录如下:
从这段话可以看出spring-boot-starter命名的潜规则。
命名潜规则
spring-boot-starter-XX是springboot官方的starter
XX-spring-boot-starter是第三方扩展的starter
打印方法执行时间的功能,需要用到aop,咱们的项目就叫做 aspectlog-spring-boot-starter 吧。
项目的宏旁pom文件如下:
关于spring-boot-configuration-processor的说明,引自springBoot官方文档:
简单说就是:写starter时,在pom中配置spring-boot-autoconfigure-processor,在编译时会自动收集配置类的条件知春,写到一个 META-INF/spring-autoconfigure-metadata.properties 中。
本次我们就选用@ConditionalOnProperty。即配置文件中有aspectLog.enable=true,才加载我们的配置类。
下面开始写自动配置类
配置类简要说明:
当配置文件有 aspectLog.enable=true 时开启,如果配置文件没有设置 aspectLog.enable 也开启。
META-INF/spring.factories 是spring的工厂机制,在这个文件中定义的类,都会被自动加载。多个配置使用逗号分割,换行用\
如果有兴趣可以查看这2篇blog:
@Enable 驱动原理(设置连接)
@EnableAutoConfiguration 处理逻辑(设置搭绝耐连接)
这是我们最终的目录结构
在IDEA中,进行mvn intall
打包完成后,在其他项目中的pom中引入进行测试
springboot starter 原理解析及实践
starter是springBoot的一个重要部分敬升源。通过starter,我们能够快速的引入一个功能,而无需额外的配置。同时starter一般还会给我提供预留的自定配置选项,我们只需要在application.properties中设置相关参数,就可以实现配置的个性化。
那么这些方便的操作是怎么实现的呢?通过了解其原理,我们也可以做一个自己的starter,来让别人快速使用我们的功能。
按个人理解,我认为springBoot Starter就是一个 智能化的配置类 @Configuration 。
接下来介绍内容包括:
1、【创建module】,首先我们自定义一个starter的module,根据你的starter实现复杂度,引入相关spring组件。最基本的,我们只需引入 spring-boot-autoconfigure 模块。
2、【业务bean实现】实现我们的业务bean,案例中我们实现最简单的sayHello服务,输入msg,返回“hello,{msg}”。
3、然后就是Configuration类的创建,这个类是starter自动初始化的核心类,负责把业务相关的bean智能的加载进来。
4、配置 spring.factories ,通过该配置,才能让springboot来自动加载我们的Configuration类。具体原理我们稍笑隐后深入了解。
具体的,是在模块的 resources/META-INF 目录下,新建 spring.factories 文件。内容如下:
最后我们把上述模块单独执行以下install或者deploy,一个starter就做好了。
其他项目使用我们的starter就非常简单了:(1)引入starter依赖;(2)注入需要的service。
done!
回头再看上边的开发流程,有两个地方需要我们了解一下:
(1)如何让starter被自动识别加载:spring.factories里的EnableAutoConfiguration原理。
(2)如何实现自动加载的智能化、可配置化:@Configuration配置类里注解。
这里我们只简单的说一下大致的原理和流程,执行细节大家可以按照文章给出的思路自己去研读。
在SpringBoot的启动类,我们都会加上 @SpringBootApplication 注解亮态。这个注解默认会引入 @EnableAutoConfiguration 注解。然后 @EnableAutoConfiguration 会 @Import(AutoConfigurationImportSelector.class) 。
AutoConfigurationImportSelector.class 的selectImports方法最终会通过 SpringFactoriesLoader.loadFactoryNames ,加载 META-INF/spring.factories 里的 EnableAutoConfiguration 配置值,也就是我们上文中设置的资源文件。
实际使用中,我们并不总是希望使用默认配置。比如有时候我想自己配置相关功能,有时候我想更改一下默认的服务参数。这些常见的场景Starter都想到了,并提供了如下的解决方案:
springboot starter提供了一系列的 @Conditional* 注解,代表什么时候启用对应的配置,具体的可以去查看一下springboot的官方文档。
比如我们案例中的 「@ConditionalOnClass(DemoHelloService.class)」,代表如果存在DemoHelloService类时,配置类才会生效;又比如「@ConditionalOnMissingBean(DemoHelloService.class)」,代表着如果项目中没有DemoHelloService类型的bean,那么该配置类会自动创建出starter默认的DemoHelloService类型bean。
这个注解主要是为了解决如下场景:我想要使用starter的默认配置类,但是又想对配置中的某些参数进行自定义配置。 @ConfigurationProperties 类就是做这个工作的。例如上述例子中,我想对默认的defaultMsg做些个性化的设置。就可以按如下方式来实现:
starter新增ConfigurationProperties类bean
启用property
在实际项目中自定义默认msg
自定义Spring starter
在Spring Boot中,使用的最多的就是starter。starter可以理解为一个可拔插式的插件,例如,你想使用JDBC插件,那么可以使用spring-boot-starter-jdbc;如果想使用MongoDB,可以使用spring-boot-starter-data-mongodb。
初学的同学可能会说:如果我要使用MongoDB,我直接引入驱动jar包就行了,何必要引入starter包?starter和普通jar包的区别在于,它能搭乱够实现自动配置,和Spring Boot无缝衔接,从而节省我们大量开发时间。
使用maven-archetype-quickstart骨架创手历建项目。
注知薯档意artifactId的命名规则,Spring官方Starter通常命名为spring-boot-starter-{name}如 spring-boot-starter-web, Spring官方建议非官方Starter命名应遵循{name}-spring-boot-starter的格式, 如mybatis-spring-boot-starter。这里创建的项目的artifactId为helloworld-spring-boot-starter
该类用于接收spring.properties中配置的参数,并自动赋值给对应的成员变量。
如果想要实现自动配置,还需要将XxxAutoConfiguration添加到spring.factories配置文件中。
注意:META-INF是自己手动创建的目录,spring.factories也是手动创建的文件,在该文件中配置自己的自动配置类。
Spring Boot在启动时扫描项目所依赖的JAR包,寻找包含spring.factories文件的JAR包,
然后读取spring.factories文件获取配置的自动配置类AutoConfiguration,
然后将自动配置类下满足条件(@ConditionalOnXxx)的@Bean放入到Spring容器中(Spring Context)
这样使用者就可以直接用来注入,因为该类已经在容器中了
[img]面试官:如何手写一个Spring Boot Starter?
当下Java Web开发领域,毫无疑问SpringBoot已经只手遮天。
没有SpringBoot之前,如果我们要搭建一个Spring Web应用,要多繁杂有多繁杂,折腾半天,也不能能搭建一个可运行的应用。我们需要做:配置Servlet、配置IOC、配置tomcat等等以及随处可见的各种xml,反正是烦的很。
在使用Spring Boot之后,效率上大大的提高了。Spring Boot也发现了很多Starter模块,比如spring-boot-starter-web、spring-boot-starter-tomcat、spring-boot-starter-test等等,让我们可以开箱即用!
Spring Boot具有这么多的优悔销点,在面试中也是必问知识之一。比如 面试官问你:如何自己写一个starter,供其他人使用呢?
要回答这碧笑游个问题,首先我们需要弄明白starter是个什么东西?你可以理解它是一个可插拔式的插件。通过starter,能够简化之前繁杂的配置,它帮助我们整合需要的配置和依赖,统一集成到starter中,再通过自动装配生成Bean,注入Spring容器中供我们使用。
弄明白starter是什么,接下来我们一起动手搞一个starter试试看看。
1、引入 spring-boot-autoconfigure
2、编写供其他服务使用的服务类MyStarterService
3、 用@ConfigurationProperties将application.xml中的属性映射为配置类
4、自动装配类MyStarterServiceAutoConfiguration
5、 在src-main-java-resource目录下建META-INF文件夹,放spring.factories文件,文件内容如下升拦:
至此,一个starter就已经完成了!
自定义SpringBoot Starter 通过注解启动装配
本章我们编写一个starter,目标如下:
1、嫌槐通过 @EnableSms 注洞谨解启用Starter
2、完成使用示例
pom.xml
编写业芹颤友务代码
将SmsUtil类交给Spring IOC管理,并提供给第三方使用
创建@EnableSms注解,当开发者添加了此注解,无论MyConfiguration类是否被spring扫描到都会进行加载
1、创建springboot项目
2、引入starter jar包
3、在启动类添加@EnableSms注解,启用Starter
4、配置参数
5、调用
关于springstarter和springstarterjar重复的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。