医疗类网站哪家做的好,网站建设设计要点,平江外贸网站推广找哪家,网页设计与制作报告书SpringBoot自定义starter
1、SpringBoot之starter机制
1.1、什么是自定义starter
SpringBoot中的starter是一种非常重要的机制(自动化配置)#xff0c;能够抛弃以前繁杂的配置#xff0c;将其统一集成进starter#xff0c;应用者只需要在maven中引入starter依赖#…SpringBoot自定义starter
1、SpringBoot之starter机制
1.1、什么是自定义starter
SpringBoot中的starter是一种非常重要的机制(自动化配置)能够抛弃以前繁杂的配置将其统一集成进starter应用者只需要在maven中引入starter依赖SpringBoot就能自动扫描到要加载的信息并启动相应的默认配置。starter让我们摆脱了各种依赖库的处理需要配置各种信息的困扰。
SpringBoot会自动通过classpath路径下的类发现需要的Bean并注册进IOC容器。SpringBoot提供了针对日常企业应用研发各种场景的spring-boot-starter依赖模块。
缺点
springboot starter带来的问题 starter使SpringBoot集成第三方框架变得简单但对刚刚上手SpringBoot的人来说可能只知道配置属性是在application.xml或application.yml中添加但他们各自的属性都有哪些具体怎么配置却无从下手
1.2、为什么要使用Springboot的自定义starter
使用自定义starter有几个重要的原因
简化依赖管理通过将常用的依赖和配置封装到一个starter中可以避免在每个项目中手动添加和管理这些依赖从而减少了开发人员的工作量和错误的可能性。提高开发效率自定义starter能够自动加载所需的配置和组件帮助开发团队快速搭建具备特定功能的项目骨架。这样开发者可以更专注于业务逻辑的实现而不是花费时间在配置上。便于维护和升级当需要更新或升级功能时只需修改自定义starter所有依赖于该功能的项目都可以从更新中受益无需逐个修改每个项目。推广和共享自定义starter可以被发布到公共仓库中使其他开发团队或开发者能够轻松地引入和使用促进了代码重用和团队之间的合作。
总结来说使用自定义starter可以显著简化项目的开发和维护流程提高团队的整体开发效率同时也有助于代码的标准化和共享。
1.3、SpringBoot的自定义starter的应用场景
简化多服务公用框架集成 在微服务架构中多个服务可能会共用某些框架或功能如Swagger用于生成在线接口文档。通过创建自定义starter可以简化每个服务中的配置过程避免重复劳动。例如封装一个swagger-starter服务中只需引入此starter即可自动生成接口文档无需在每个服务中单独配置。 服务间调用的鉴权 当服务间通过Feign进行相互调用且需要进行鉴权时可以创建一个自定义starter来封装鉴权逻辑。这样在每个服务发起调用之前都会自动添加鉴权参数目标服务收到请求后也会自动进行鉴权从而简化了每个服务的鉴权配置。 快速搭建特定功能的项目 针对特定功能或业务需求可以创建自定义starter来快速搭建项目。例如开发一个电商平台时可以创建一个包含商品管理、订单处理、支付接口等功能的自定义starter。新项目只需引入此starter即可快速具备这些功能。 统一配置和管理 在大型项目中可能存在多个服务或模块需要共享某些配置或管理功能。通过自定义starter可以将这些共享的配置和管理功能封装起来确保各个服务或模块能够一致地使用这些功能。 第三方库或框架的集成 当需要使用某个特定的第三方库或框架时如果Spring Boot官方没有提供相应的starter可以自定义一个starter来简化集成过程。这样其他项目只需引入这个自定义starter就可以轻松地使用该第三方库或框架。
总的来说自定义Spring Boot starter的应用场景非常广泛主要用于简化配置、提高开发效率、统一管理和维护等方面
1.4.自动加载核心注解说明 2、创建一个自定义starter
2.1、命名规范
SpringBoot官方命名方式
spring-boot-starter-{模块名}例如spring-boot-starter-web
自定义命名方式
{模块名}-spring-boot-starter例如teststarter-spring-boot-starter
starter项目和SpringBoot工程结构没有什么区别。必须引入的依赖
dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-configuration-processor/artifactIdoptionaltrue/optional
/dependencyspring-boot-configuration-processor 是一个注解处理器用于处理 Spring Boot 配置类的注解并生成配置属性的元数据。它在开发过程中起到以下几个重要的作用
生成配置属性的元数据: 当你使用 ConfigurationProperties 注解来声明配置类时spring-boot-configuration-processor 会解析该注解并生成与配置属性相关的元数据。这些元数据包括属性的名称、类型、描述、默认值等信息。这些信息可以帮助 IDE 在开发过程中提供代码提示、自动补全和验证功能。提供配置属性的编译时验证: 使用 ConfigurationProperties 注解时你可以使用其他注解如 Value、Valid 等来描述配置属性的约束条件。spring-boot-configuration-processor 可以处理这些注解并在编译时进行验证。这样你可以在开发阶段及早发现配置属性的错误或不一致而不是在运行时才遇到问题。简化配置类的编写: 通过使用 spring-boot-configuration-processor你可以更轻松地编写配置类。它会自动处理 ConfigurationProperties 注解及其相关注解生成属性的 getter、setter 方法并提供默认的配置文件映射规则。这样你可以专注于定义配置属性的结构和业务逻辑而不需要手动编写重复的代码。提升开发体验: spring-boot-configuration-processor 增强了开发工具的功能例如在 IDE 中提供配置属性的智能提示、文档、类型检查等功能。这可以减少开发过程中的错误并提高代码的可读性和可维护性。
总而言之spring-boot-configuration-processor 可以简化 Spring Boot 配置类的开发提供编译时验证和开发工具的支持从而改善开发体验并减少潜在的配置错误。它是 Spring Boot 框架中重要的辅助工具帮助开发者更高效地处理配置属性。
2.2、创建项目
使用Cloud Native App Initializer (aliyun.com)云原生应用脚手架创建项目注也可以直接使用IDEA创建 使用IDEA打开项目 在pom.xml中引入依赖 2.3、创建配置类properties
/*** 属性配置类用于接收外部传导的参数*/
ConfigurationProperties(prefixscloud.sms)
public class SmsProperties {private String accessKeyId;//访问ID、即帐号private String accessKeySecret;//访问凭证即密码public String getAccessKeyId() {return accessKeyId;}public void setAccessKeyId(String accessKeyId) {this.accessKeyId accessKeyId;}public String getAccessKeySecret() {return accessKeySecret;}public void setAccessKeySecret(String accessKeySecret) {this.accessKeySecret accessKeySecret;}
}2.4、编写相关接口以及相关实现类代码
接口
package com.zking.teststarterspringbootstarter.service;public interface ItestStarter {String login(String name);
}
实现类
package com.zking.teststarterspringbootstarter.service;import com.zking.teststarterspringbootstarter.properties.Smsproperties;public class testStarterImpl implements ItestStarter {private Smsproperties smsproperties;public testStarterImpl(Smsproperties smsproperties) {this.smsproperties smsproperties;}public void setSmsproperties(Smsproperties smsproperties) {this.smsproperties smsproperties;}Overridepublic String login(String name) {if (!smsproperties.getAccessKeyId().equals(admin))return namesorry,smsproperties.getAccessKeyId()用户不存在;elsereturn name欢迎登录你的账号为smsproperties.getAccessKeyId();}
}
2.5、创建自动配置类
EnableConfigurationProperties注解的作用是ConfigurationProperties注解生效。如果只配置ConfigurationProperties注解在IOC容器中是获取不到properties配置文件转化的bean的
package com.zking.teststarterspringbootstarter.autoconfig;import com.zking.teststarterspringbootstarter.properties.Smsproperties;
import com.zking.teststarterspringbootstarter.service.ItestStarter;
import com.zking.teststarterspringbootstarter.service.testStarterImpl;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;/*** 自动配置类*/
Configuration
EnableConfigurationProperties({Smsproperties.class})
public class AutoConfig {Autowiredprivate Smsproperties smsproperties;/*** 通过Bean注解将其注入到spring上下文中* return*/Beanpublic ItestStarter testStarterService(){return new testStarterImpl(smsproperties);}
}
2.6、编写spring.factories文件加载自动配置类
首先需要在resource目录下创建一个META-INF目录如图 在该文件中加入如下配置该配置指定上步骤中定义的配置类为自动装配的配置
org.springframework.boot.autoconfigure.EnableAutoConfiguration\com.zking.scloudspringbootstarter.config.AutoConfig,\com.zking.scloudspringbootstarter.config.WebLogAutoConfig注意其中AutoConfig是starter配置文件的类限定名多个之间逗号分割还可以\进行转义即相当于去掉后面换行和空格符号。 2.7、打包安装 2.8、其他项目引用并测试 2.9、创建controller测试访问 3、自定义starter基于AOP切面
3.1.创建配置类Properties
enabled属性用于控制是否开关日志请提供enabled属性的getter、setter方法。
/*** AOP日志配置类*/
ConfigurationProperties(prefix scloud.weblog)
public class WebLogProperties {private boolean enabled;//TODO
}3.2.实现基于AOP技术的日志切面功能
Component
Slf4j
Aspect
public class WebLogAspect {Pointcut(execution(public * com.zking..controller.*.*(..)))Pointcut(execution(* *..*Controller.*(..)))public void webLog(){}Before(webLog())public void doBefore(JoinPoint joinPoint) throws Throwable {// 接收到请求记录请求内容ServletRequestAttributes attributes (ServletRequestAttributes)RequestContextHolder.getRequestAttributes();HttpServletRequest request attributes.getRequest();// 记录下请求内容log.info(开始服务:{}, request.getRequestURL().toString());log.info(客户端IP :{} , request.getRemoteAddr());log.info(参数值 :{}, Arrays.toString(joinPoint.getArgs()));}AfterReturning(returning ret, pointcut webLog())public void doAfterReturning(Object ret) throws Throwable {// 处理完请求返回内容log.info(返回值 : {} , ret);}
}3.3.创建自动配置类
Configuration
EnableConfigurationProperties({WebLogProperties.class})
ConditionalOnProperty(prefix scloud.weblog,valueenabled,matchIfMissing true)
public class WebLogAutoConfig {BeanConditionalOnMissingBeanpublic WebLogAspect webLogAspect(){return new WebLogAspect();}
}matchIfMissing属性默认情况下matchIfMissing为false也就是说如果未进行属性配置则自动配置不生效。如果matchIfMissing为true则表示如果没有对应的属性配置则自动配置默认生效。
配置属性enabled
不配置enabledmatchifmissingfalse 不满足 matchifmissingtrue 满足配置enabledfalse matchifmissingfalse 不满足 matchifmissingtrue 不满足配置enabledtruematchifmissingfalse 满足 matchifmissingtrue 满足
3.4.编写spring.factories文件
org.springframework.boot.autoconfigure.EnableAutoConfiguration\com.zking.scloudspringbootstarter.config.AutoConfig,\com.zking.scloudspringbootstarter.config.WebLogAutoConfig3.5.打包安装
参考《创建一个自定义starter》中的2.7、打包安装。
打包安装完成之后直接在其他项目引入依赖并配置测试即可。
尾言
自动装配流程如何实现
首先在启动类中存在SpringBootApplication启动类注解注解在这个注解中存在EnableAutoConfiguration启动自动专装配注解通过他内部的import注解会导入批量导入bean并进行bean的注册它会运行内部的selectImports方法在方法中调用getCandidateConfigurations方法查询对应的需要自动装配的装配类在这个方法中调用了SpringFactoriesLoader类它对查找的文件进行了一个约束只能是“META-INF/spring.fatories”中的loadFactoryNames方法返回需要进行装配的类SpringBoot会根据spring.fatories文件中org.springframework.boot.autoconfigure.EnableAutoConfiguration这个key找到对应的自定义配置类进行自动装配