가장 상세한 정의 봄 부팅 스타터 개발 자습서

1. 소개

성장 부풀어 봄으로, 구성을 단순화하기 위해, 상자, 빠른 통합에서, 부트 봄이 밝혀졌다. 자바는 프레임 워크의 가장 불이되었다. 우리는 일반적으로 봄 부팅과 웹 응용 프로그램을 개발. 서블릿 컨테이너 바람둥이 스프링 MVC의 기본, 스프링 MVC 구성 요소가 통합되어 있기 때문에 스프링 부팅 스타터 바람둥이. 그러나 지금 물러 서블릿 컨테이너의 성능이 매우 좋다. 우리는 다음과 같은 방법으로 Tomcat을 배제 할 수 있습니다 :

그런 다음 물러 직접 대체 :

필요가 코드를 변경 없습니다. 1 플러그 :이 후자의 구성 요소의 장점이다. 2. 사용자 정의 할 수 있습니다. 3. 통합 수요. 왜 빠른 적응을 달성 할 수있다? 우리는 이러한 시나리오를 상상 : 당신의 차에 나사 깨진 바퀴가있는 경우, 당신은 자신의 장비에 나사를 사고 싶은데요. 당신이 차의 위치와 브랜드 소유자가 사용 나사의 종류 정확히 알 수있을 것보고 같이 오랫동안 같이 가게로 이동합니다. 이렇게 개발 된 표준 장점이다. 표준이 없다면, 그것은 나사를 지원하지 않는 구입하기 쉽고, 당신은 시행 착오를 유지해야합니다. 이것은 당신이 원하는 분명하지 않다. 이러한 표준 미묘한 경우에, 우리는 더욱 더 편리한 통신한다. 때때로 당신의 여자 친구는 그녀가하고 싶어 알아보세요. 그래서 봄 부팅 그래서 프로그램 구성 요소 사이의 복잡성을 줄이고, 구성을 줄이기 위해 규칙 "합의가 구성된보다 큰"가있다. 당신이 봄 부팅 초보 사용자 지정을 개발하고 그래서, 우리는 또한 방법 스타터보다 편리 고려하는 것이 좋습니다.

2. 봄 부팅 규칙의 일부를

표준과 규칙이 있어야합니다 구성 요소의 디자인. 봄 부팅 초보도 예외는 아니다. 평소 용의자의 일부에서 살펴 보자.

2.1 명명 스타일

곧 아기가있는 경우, 출산 전에, 더 불안 당신은 이름이어야합니다. 왕은 확실히 이상한 모양을 자극 할 옆집 성을 재생되지 않습니다, 원산지 식별에게 당신과 당신의 사랑하는 사람의 이름을 지정합니다. 받는다는에서의 groupId는 artifactId를이 이름을 나타냅니다, 성을 나타냅니다. 봄 부트는 이름의 제안입니다. 의 groupId는 공식 org.springframework.boot를 사용하지 않는
자신 만의 독특한를 사용합니다. 이름 artifactId를 들어, 봄 부팅 관계자는 형식의 이름을 지정하는 예를 MyBatis로 스프링 부팅 시동기에 대한 비공식 스타터 XXXX-스프링 부팅 스타터, 다음 제안했다. 공식 스타터는 위에서 언급 한 스프링 부팅 스타터 물러으로, 스프링 부팅 스타터-XXXX를 따릅니다. 이 규칙을 무시 스타터 오픈 소스의 대부분은 매우 '전문. "아니었다

3. 사용자 정의 스타터

다음으로, 우리는 사용자 정의 타사 SMS 스타터, 지정된 SMS-스프링 부팅 선발을 구축 할 수 있습니다. 소개 쓰는 동안 할 몇 가지 사항이있다. 여기서 주형 샘플 및 테스트 모듈을 생략한다 :

우리가 설정 한 이상 다음과 같은 항목을 바탕으로 :

3.1 SMS 스프링 부팅

SMS 스프링 부팅은 프로젝트 종속성 관리를 구축하는 것이 중요하다. 그래서 BOM을 도입 할 필요가있다. 시동 키의 모든 모듈 모듈의 관리 및 모든 스타터 SMS 스프링 부팅 관리로 SMS를 - 봄 - 부팅 자동 구성에 따라 달라집니다.

3.2 SMS-스프링 부팅 자동 구성

이 모듈은 구성 파라미터를 정의하기 위해 사용되고, 외부의 자동 노출 설정 기능 (통상적으로 추상적 인터페이스 봄 빈)된다.

3.2.1 구성 매개 변수

一般配置参数都是在Spring Boot 的application.yml中。我们会定义一个前缀标识来作为名称空间隔离各个组件的参数。对应的组件会定义一个XXXXProperties 来自动装配这些参数。自动装配的机制基于@ConfigurationProperties注解,请注意一定要显式声明你配置的前缀标识(prefix)。我们的sms-spring-boot会作如下配置:

c997518d5e8dba9a9bb69dd23a0770d8.png

以上以阿里云的短信功能为例作配置,在将来使用时只需要在application.yml中加入上面对应SmsProperties的配置:

302dd03f038782022ec8cf43168620ca.png

如果你集成了Spring Boot 校验库 你也可以对SmsProperties进行校验。在配置application.yml时细心的java开发者会发现参数配置都有像下面一样的参数描述:
8092aac794d4b77ca959909c3af789dd.png

就像java中的注释一样方便我们理解该配置的作用,其实这个就是java注释生成的。你需要依赖

8092aac794d4b77ca959909c3af789dd.png

然后就该依赖会对SmsProperties 成员属性的注释进行提取生成一个spring-configuration-metadata.json文件,这就是配置描述的元数据文件。Spring Boot官方也对注释进行了一些规则约束:

  • 不要以“The”或“A”开头描述。
  • 对于boolean类型,请使用“Whether" 或“Enable”开始描述。
  • 对于基于集合的类型,请使用“Comma-separated list”
  • 如果默认时间单位不等同于毫秒,则使用java.time.Duration而不是long描述默认单位,例如“如果未指定持续时间后缀,则将使用秒”。
  • 除非必须在运行时确定,否则不要在描述中提供默认值。

补充我个人建议描述尽量使用英文描述。

3.2.2 配置自动暴露功能接口

拿到配置后,接下来就是根据配置来初始化我们的功能接口,我们会抽象一个短信发送接口SmsSender,根据短信提供方的SDK来进行功能设计。请注意autoconfigure模块的依赖几乎都是不可传递的。也就是依赖坐标配置optional为true 。
功能接口实现完后我们会编写一个自动配置类 SmsAutoConfiguration 。除了@Configuration注解外,@ConfigurationProperties会帮助我们将我们的配置类SmsProperties加载进来。然后将我们需要暴露的功能接口声明为Spring Bean 暴露给Spring Boot应用 。有时候我们还可以通过一些条件来控制SmsAutoConfiguration或者SmsSender ,比如根据某个条件是否加载或加载不同的SmsSender。有时间你可以看看redis-starter就能很明显感觉到,它会根据luttuce、redisson、jedis 的变化实例化不同的客户端链接。实现方式是使用了@Conditional系列注解,有时间可以学习一下该系列的注解。好了我们的SmsAutoConfiguration声明如下:

a9204a6d80a3df1a7e1a2ac7704c3664.png

3.2.3 主动生效和被动生效

starter集成入应用有两种方式。我们从应用视角来看有两种:

  • 一种是主动生效,在starter组件集成入Spring Boot应用时需要你主动声明启用该starter才生效,即使你配置完全。这里会用到@Import注解,将该注解标记到你自定义的@Enable注解上:
    be07d9a2aa637b267ae9cba39b8b6064.png
    我们将该注解标记入Spring Boot应用就可以使用短信功能了。
  • 另一种被动生效,在starter组件集成入Spring Boot应用时就已经被应用捕捉到。这里会用到类似java的SPI机制。在autoconfigure资源包下新建META-INF/spring.factories写入SmsAutoConfiguration全限定名。
    d3422497106918aadf5237c75f5d66ad.png

多个配置类逗号隔开,换行使用反斜杠。

3.3 sms-spring-boot-starter

该模块是一个空jar。它唯一目的是提供必要的依赖项来使用starter。你可以认为它就是集成该starter功能的唯一入口。不要对添加启动器的项目做出假设。如果您自动配置的依赖库通常需要其他启动器,请同时提及它们。如果可选依赖项的数量很高,则提供一组适当的默认依赖项可能很难,因为您应该避免包含对典型库的使用不必要的依赖项。换句话说,您不应该包含可选的依赖项。
无论哪种方式,您的starter必须直接或间接引用核心Spring Boot启动器(spring-boot-starter)(如果您的启动器依赖于另一个启动器,则无需添加它)。如果只使用自定义启动器创建项目,则Spring Boot的核心功能将通过核心启动器的存在来实现。
我们的sms-spring-boot-starter仅仅是以下的pom:

5f45659e22f942fde9c31ee6103bac21.png

到此为止,我们的整个短信Starter就开发完成了。

4.总结

自定义starter对于我们项目组件化、模块化是有很大帮助的。同时也是Spring Boot一大特色。相信通过小胖的介绍你已经蠢蠢欲试了,那么就赶紧开始写一个吧。如果觉得对你有用可以点个赞关注一下。

추천

출처www.cnblogs.com/felordcn/p/12133481.html