SpringBootStarter技术,生产就绪与环境设置,实现自定义Starter

尊重原创版权: https://www.conghengx.com/hot/45232.html
更多内容参考: https://www.conghengx.com/

SpringBootStarter技术:生产就绪与环境配置、实现自定义Starter

Spring Boot Starter技术

Spring Boot Starter概述

Spring Boot能够迅速地在微服务开发领域流行起来,并影响众多Spring和Java开发社区开发人员,可以说主要原因有两个。

● 一 是 Spring 的 约 定 优 于 配 置 的 特 性 ( Convention
OverConfiguration),这个特性的关键实现机制就是自动装配机制。同时这一特性很好地遵循了简约开发原则,它不仅减少了软件开发人员的开发工作量和需要做的决定数量,获得简单易用的收益,而且方便扩展又不失灵活性。从Spring到Spring
Boot,从Ant到Maven,本质上都践行了约定优于配置的原则。

● 二是Spring Boot基于“Spring Boot
Starter技术”,即开箱即用的自动配置模块。在传统Spring应用系统中,我们需要完成众多的烦琐配置和多个jar包的手动引入及代码的初始化工作,才能将所需要的模块引入工程中。而Spring
BootStarter的出现,简化了我们的配置,更重要的是将我们带入一种“可插拔”的编程模式。我们只需要在Maven中引入对应的现成Starter依赖,在代码中添加必要的注解,就可以获得开箱即用的对应功能。同时,我们可以结合Spring
Boot的自动配置机制,实现自定义Starter组件,从而成为一个自包含的组件和模块,供第三方使用。

从Starter的命名方式我们可以区分出两类Starter。

● Spring 官 方 Starter : 命 名 应 遵 循 spring-boot-starter-{name} 的 格 式 , 如 spring-
boot-starter-web 作 为 SpringBoot Web模块的官方artifactId。

● Spring 非 官 方 Starter : 命 名 应 遵 循 {name}-spring-bootstarter的格式,如mybatis-
spring-boot-starter。本章中介绍的自定义Starter属于后者。

Spring官方Starter

对于Spring官方Starter,只需在pom.xml配置文件中增加对于Starter的依赖,这个Starter就能够通过代码配置上下文发现并将所需要jar包进行关联,在自动配置类中可以通过@ConditionalOnClass来决定是否实例化(ConditionalOnClass是指在classpath发现需要的依赖的类时实例化)。

所有的Starter其实都是要通过代码配置被上下文发现的,可以在spring-boot-autoconfigure-
xxx.jar源码包中查看,例如下图所示,我们可以看到Spring Boot自带的Starter实现。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1dqz8qvg-1657171059274)(https://p9.toutiaoimg.com/origin/pgc-image/951b6564af26495993f827a28801b69e?from=pc)]

对 于 Spring Boot 内 置 Web 容 器 来 说 , 只 要 通 过@ConditionalOnClass 发 现 了 Tomcat 这 个
类 ( 配 置 了 spring-bootstarter-web的Maven依赖),Spring
Boot就会自动检查项目依赖并启动Tomcat服务,如下代码所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NtnoYjvZ-1657171059276)(https://p9.toutiaoimg.com/origin/pgc-image/8a81eaf6da9e4216b9f2cd54547d5f0b?from=pc)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WGEznAf8-1657171059277)(https://p9.toutiaoimg.com/origin/pgc-image/af40306ee3794433920054fc13fdeacf?from=pc)]

Spring非官方Starter

原理上基本与官方Starter一致,需要在已经实现的artifactId上再封装一层,这一层只负责包含具体的实现类和配置类,而这个Starter的pom.xml文件相当于一个Facade门面,代码如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ksAKbvD2-1657171059279)(https://p9.toutiaoimg.com/origin/pgc-image/c554ab755c044d8ca5d66b6de2a52a96?from=pc)]

进入pom.xml文件,可以发现自包含的依赖关系,代码如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LcxUVppT-1657171059279)(https://p9.toutiaoimg.com/origin/pgc-image/59d13151a9f14d68a4227bc378164929?from=pc)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gQDRKzgM-1657171059281)(https://p9.toutiaoimg.com/origin/pgc-image/c0d9283ae1494cacac9c3709d6b0dddd?from=pc)]

在 这 个 pom.xml 文 件 中 , 我 们 发 现 了 mybatis-spring-bootautoconfigure 自 动 配 置 类 , 通
过 它 我 们 可 以 完 成 MyBatis 配 置JavaConfig的自动配置工作和MyBatis实例化配置。它的配置类代码如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dmfHQNVW-1657171059285)(https://p9.toutiaoimg.com/origin/pgc-image/3ca34c4a10a341348e878fd47ccdac57?from=pc)]

通过MybatisAutoConfiguration自动化配置类,就实现了MyBatis的配置在启动时被Spring Boot程序加载到Spring
Boot的Factory工厂并实例化为Bean。

Spring Boot常用开箱即用Starter

开箱即用的Starter组件也遵循Spring约定优于配置的理念,针对企业日常应用开发场景,通过引入这些现成的Starter可以简化开发流程。

spring-boot-starter-web快速开发

除了开发少数的独立应用,大部分情况下,我们都使用SpringMVC组件开发企业Web应用,为了帮助我们快速搭建并开发一个Web项目,Spring
Boot提供了spring-boot-starter-web自动配置模块,只要将spring-boot-starter-web加入项目的Maven依赖即可:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-z1kkjgVe-1657171059286)(https://p9.toutiaoimg.com/origin/pgc-image/26650dd93cbc40189901d6a37729866f?from=pc)]

在我们的工程中加入上面的Starter依赖后,就得到了一个可直接执行的Web应用环境,在当前项目下运行mvn spring-
boot:run,可以直接启动一个使用了嵌入式Tomcat服务请求的Web应用服务。目前我们还没有提供任何Web请求的Controller,所以访问任何路径都会返回一个Spring
Boot默认提供的错误页面,我们可以在当前项目下新建一个服务根路径作为Web请求的Controller实现,如下代码所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4Hoix33F-1657171059287)(https://p9.toutiaoimg.com/origin/pgc-image/1ee2ae018ec14ceeba6e528dd00c1631?from=pc)]

spring-boot-starter-jdbc与数据访问

为了使Spring Boot成为我们自动配置数据访问的基础设施,我们需要直接或者间接地依赖spring-jdbc,当spring-
jdbc位于SpringBoot应用的classpath路径时,会触发数据访问相关的自动配置行为。

最简单的做法就是把spring-boot-starter-
jdbc添到应用的依赖文件中。默认情况下,如果我们没有配置任何DataSource,那么SpringBoot会为我们自动配置一个基于嵌入式数据库的DataSource,这种自动配置行为其实很适合于测试场景,但对实际的开发帮助不大,基本上我们会自己配置一个DataSource实例。下面我们将spring-
bootstarter-jdbc加入项目的Maven依赖:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VbrhRg5K-1657171059288)(https://p9.toutiaoimg.com/origin/pgc-image/53ecd91d85ee4852b44678ff8b639e79?from=pc)]

如果我们的工程只依赖一个数据库,那么使用DataSource自动配置模块提供的参数是最方便的。在本书的7.1.4节中,我们会对“使用spring-boot-
starter-jdbc访问MySQL”进行详细讲解。

spring-boot-starter-aop及其使用场景

在Java语言中,AOP(Aspect Oriented
Programming,面向切面编程)通过提供另一种思考程序结构的方式来补充OOP(ObjectOriented
Programming,面向对象编程)。OOP中模块化的关键单元是类。而在AOP中,模块化单元由“切面”组成。通过预编译方式和运行期动态代理实现程序功能的统一维护。AOP是Spring框架的一个重要特色,它可对既有程序定义一个切入点(Pointcut),然后在切入点前后切入不同的执行任务。常见使用场景有:打开/关闭数据库连接、打开/关闭事务、记录日志等。基于AOP不会破坏原来的程序逻辑,因此它可以很好地对业务逻辑的各个部分进行抽离,从而使得业务逻辑各个部分的耦合度降低,提高程序的复用性,同时提高开发效率。

Spring Boot对AOP提供了Starter组件支持,Maven依赖如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MTqD0zwe-1657171059289)(https://p9.toutiaoimg.com/origin/pgc-image/9b59bcacaf314ae693a1c994de3949b2?from=pc)]

spring-boot-starter-aop主要由两部分组成:

●org.springframework.boot.autoconfigure.aop.AopAutoConfiguration:提供配置类。

● 通知:配置类中涉及的通知类型有前置通知、后置最终通知、后置返回通知、后置异常通知和环绕通知。

下面是一个实现了Web Controller调用的日志切面打印Web请求参数及相应结果的实例。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Ls8E954w-1657171059

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值