主要观点总结
本文介绍了一个可能对你有用的社群和开源项目,包括一对一交流、面试小册、简历优化等。还介绍了一个自定义SpringBoot Starter(全局加解密)的开发流程,包括注入SpringBoot的方式、demo演示、测试、优化等。
关键观点总结
关键观点1: 社群介绍
这是一个可能对你有用的社群,提供一对一交流、面试小册、简历优化等服务。
关键观点2: 开源项目介绍
介绍了一个开源项目,包括前端管理后台、微信小程序、后端支持单体和微服务架构等功能。还提供了部分视频教程和项目的GitHub地址。
关键观点3: 自定义SpringBoot Starter(全局加解密)的开发流程
介绍如何自定义SpringBoot Starter,通过配置文件初始化,让配置类注解@ComponentScan扫描到的Bean等注入到SpringBoot中。通过自定义注解和RequestBodyAdvice/ResponseBodyAdvice组合拦截请求,在BeforBodyRead/beforeBodyWrite中进行数据的前置处理,实现全局加解密功能。
关键观点4: 项目处理流程图
核心代码包括进入RequestBodyDecryptAdvice的beforeBodyRead操作和进入ResponseBodyEncryptAdvice的beforeBodyWrite操作。采用SM2加密方式,通过@PostConstruct修饰方法,保证SmUtil.sm2()只会被调用一次。
关键观点5: 测试与优化
测试复用了之前的测试项目,引用打包的maven依赖。优化后的项目结构包括增加配置类,用于绑定外部配置到Java对象的机制。可以重写Starter默认的加解密方式。
正文
https://gitee.com/xbhog/encry-adecry-spring-boot-starter
基于 Spring Boot + MyBatis Plus + Vue & Element 实现的后台管理系统 + 用户小程序,支持 RBAC 动态权限、多租户、数据权限、工作流、三方登录、支付、短信、商城等功能
-
项目地址:https://github.com/YunaiV/ruoyi-vue-pro
-
视频教程:https://doc.iocoder.cn/video/
SpringBoot Starter作用将一组相关的依赖打包,简化项目的配置和初始化过程,通过特定的Starter开发者可以快速的实现特定功能模块的开发和扩展。
自定义Starter能够促进团队内部资源的复用,保持项目间的一致性,提升协作效率并且有助于构建稳定、高效的大型系统。
注入SpringBoot的方式
在刚开始开发Starter的时候,首先考虑的是怎么能注入到SpringBoot中?
这部分涉及到部分SpringBoot的自动装配原理,不太清楚的朋友可以补习下;
注入SpringBoot需要配置文件,在项目中的resources资源目录中创建该目录和文件。
demo-spring-boot-starter
└── src
└── main
└── java
└── com.xbhog
├── DemoBean.java
└── DemoBeanConfig.java
└── resources
└── META-INF
└── spring.factories
在spring.factories中我们指定一下自动装配的配置类,格式如下:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.xbhog.DemoBeanConfig
@Slf4j
@Configuration
public class DemoBeanConfig {
@Bean
public DemoBean getDemo() {
log.info("已经触发了配置类,正在初始化DemoBean...");
return new DemoBean();
}
}
@Slf4j
public class DemoBean {
public void getDemo(){
log.info("方法调用成功");
}
}
这样就可以将设置的包扫描路径下的相关操作打包到SpringBoot 中。
SpringBoot主类启动器:初始化的操作,感兴趣的朋友可以研究下
完成后,我们可以打包该项目,然后在测试工程红进行Maven的引入、测试。
测试
新建Spring 测试工程,引入依赖:
com.xbhog
demo-spring-boot-starter
1.0
@RestController
public class BasicController implements ApplicationContextAware {
private ApplicationContext applicationContext;
/**两种引入方式都可以
@Autowired
private DemoBean demoBean;*/
@GetMapping("/configTest")
public void configTest() {
DemoBean demoBean = applicationContext.getBean(DemoBean.class);
demoBean.getDemo();
}
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
this.applicationContext = applicationContext;
}
}
请求地址后,可以观察控制台,如下日志表示SpringBoot Starter可以使用了。
到此,一个简单的Starter开发完成了,后续可以围绕工程,根据需求和业务,对通用功能(接口操作日志、异常、加解密、白名单等)进行封装,最后打到Maven仓库中进行使用。