当前位置: 首页 > news >正文

部队网站设计软件开发工程师

部队网站设计,软件开发工程师,服装箱包网站建设,网站空间免费SpringBoot自定义starter 1、SpringBoot之starter机制 1.1、什么是自定义starter ​ SpringBoot中的starter是一种非常重要的机制(自动化配置),能够抛弃以前繁杂的配置,将其统一集成进starter,应用者只需要在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有几个重要的原因:

  1. 简化依赖管理:通过将常用的依赖和配置封装到一个starter中,可以避免在每个项目中手动添加和管理这些依赖,从而减少了开发人员的工作量和错误的可能性。
  2. 提高开发效率:自定义starter能够自动加载所需的配置和组件,帮助开发团队快速搭建具备特定功能的项目骨架。这样开发者可以更专注于业务逻辑的实现,而不是花费时间在配置上。
  3. 便于维护和升级:当需要更新或升级功能时,只需修改自定义starter,所有依赖于该功能的项目都可以从更新中受益,无需逐个修改每个项目。
  4. 推广和共享:自定义starter可以被发布到公共仓库中,使其他开发团队或开发者能够轻松地引入和使用,促进了代码重用和团队之间的合作。

总结来说,使用自定义starter可以显著简化项目的开发和维护流程,提高团队的整体开发效率,同时也有助于代码的标准化和共享。

1.3、SpringBoot的自定义starter的应用场景

  1. 简化多服务公用框架集成
    • 在微服务架构中,多个服务可能会共用某些框架或功能,如Swagger用于生成在线接口文档。通过创建自定义starter,可以简化每个服务中的配置过程,避免重复劳动。例如,封装一个swagger-starter,服务中只需引入此starter即可自动生成接口文档,无需在每个服务中单独配置。
  2. 服务间调用的鉴权
    • 当服务间通过Feign进行相互调用且需要进行鉴权时,可以创建一个自定义starter来封装鉴权逻辑。这样,在每个服务发起调用之前,都会自动添加鉴权参数,目标服务收到请求后也会自动进行鉴权,从而简化了每个服务的鉴权配置。
  3. 快速搭建特定功能的项目
    • 针对特定功能或业务需求,可以创建自定义starter来快速搭建项目。例如,开发一个电商平台时,可以创建一个包含商品管理、订单处理、支付接口等功能的自定义starter。新项目只需引入此starter,即可快速具备这些功能。
  4. 统一配置和管理
    • 在大型项目中,可能存在多个服务或模块需要共享某些配置或管理功能。通过自定义starter,可以将这些共享的配置和管理功能封装起来,确保各个服务或模块能够一致地使用这些功能。
  5. 第三方库或框架的集成
    • 当需要使用某个特定的第三方库或框架时,如果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工程结构没有什么区别。必须引入的依赖:

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-configuration-processor</artifactId><optional>true</optional>
</dependency>

spring-boot-configuration-processor 是一个注解处理器,用于处理 Spring Boot 配置类的注解,并生成配置属性的元数据。它在开发过程中起到以下几个重要的作用:

  1. 生成配置属性的元数据: 当你使用 @ConfigurationProperties 注解来声明配置类时,spring-boot-configuration-processor 会解析该注解,并生成与配置属性相关的元数据。这些元数据包括属性的名称、类型、描述、默认值等信息。这些信息可以帮助 IDE 在开发过程中提供代码提示、自动补全和验证功能。
  2. 提供配置属性的编译时验证: 使用 @ConfigurationProperties 注解时,你可以使用其他注解(如 @Value@Valid 等)来描述配置属性的约束条件。spring-boot-configuration-processor 可以处理这些注解,并在编译时进行验证。这样,你可以在开发阶段及早发现配置属性的错误或不一致,而不是在运行时才遇到问题。
  3. 简化配置类的编写: 通过使用 spring-boot-configuration-processor,你可以更轻松地编写配置类。它会自动处理 @ConfigurationProperties 注解及其相关注解,生成属性的 getter、setter 方法,并提供默认的配置文件映射规则。这样,你可以专注于定义配置属性的结构和业务逻辑,而不需要手动编写重复的代码。
  4. 提升开发体验: 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(prefix="scloud.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 name+"sorry,"+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",value="enabled",matchIfMissing = true)
public class WebLogAutoConfig {@Bean@ConditionalOnMissingBeanpublic WebLogAspect webLogAspect(){return new WebLogAspect();}
}

matchIfMissing属性:默认情况下matchIfMissing为false,也就是说如果未进行属性配置,则自动配置不生效。如果matchIfMissing为true,则表示如果没有对应的属性配置,则自动配置默认生效。

配置属性enabled:

  • 不配置enabled:matchifmissing=false 不满足 matchifmissing=true 满足
  • 配置enabled=false: matchifmissing=false 不满足 matchifmissing=true 不满足
  • 配置enabled=true:matchifmissing=false 满足 matchifmissing=true 满足

3.4.编写spring.factories文件

org.springframework.boot.autoconfigure.EnableAutoConfiguration=\com.zking.scloudspringbootstarter.config.AutoConfig,\com.zking.scloudspringbootstarter.config.WebLogAutoConfig

3.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找到对应的自定义配置类进行自动装配!

http://www.hkea.cn/news/713268/

相关文章:

  • 北京怀柔网站制作教育机构
  • 网站建设费 大创友链交换平台
  • o2o商城网站系统开发微信群拉人的营销方法
  • 帝国cms做淘宝客网站网页设计用什么软件
  • 营销型网站建设的优缺点视频优化软件
  • 珠海响应式网站建设推广公司网络营销发展方案策划书
  • 中国人自己的空间站每日英语新闻
  • 教师可以做网站吗seo常用工具包括
  • 武山建设局网站什么是seo
  • 做文案需要用到的网站全网模板建站系统
  • 苏州乡村旅游网站建设策划书网站建设百度推广
  • 12380网站建设情况总结百度浏览器入口
  • 直播网站开发要多久排行榜前十名
  • 网站备案完才能建站吗企业建站公司
  • 网站开发外包合同西安网站优化公司
  • 2022网页设计尺寸规范和要求怎么做seo关键词优化
  • 北京大学两学一做网站十大收益最好的自媒体平台
  • 网站开发服务费企业网站建设的一般要素
  • 台州企业网站制作公司郴州网站推广
  • 如何做移动端网站邮件营销
  • 网站制作佛山crm管理系统
  • 网站综合营销方案设计网页设计教程
  • 东莞做网站制作宁波技术好的企业网站制作
  • 广州做网站公司哪家好如何注册一个网站
  • 网站备案协议书互联网营销师证书含金量
  • 广州企业网站建设报价免费推广网站大全
  • 宁波网站排名怎么提交网址让百度收录
  • 杭州 手机网站建设活动营销
  • 加网络网站建设工作室做一个企业网站大概需要多少钱
  • 张家港优化网站seo百度网盘下载