5个月的精华:Spring/SpringBoot扩展点手册:手册在手,编码无忧:全网独一份 - 第451篇
历史文章(文章累计450+)
《国内最全的Spring Boot系列之一》
《国内最全的Spring Boot系列之二》
《国内最全的Spring Boot系列之三》
《国内最全的Spring Boot系列之四》
《国内最全的Spring Boot系列之五》
利用Spring扩展点模拟Feign实现远程调用(干货满满)「扩展点实战系列」- 第445篇
深入Feign源码吃透Spring扩展点「扩展点实战系列」- 第446篇
利用Spring扩展点对敏感信息加密解密,一文集齐n多知识点「扩展点实战系列」」- 第447篇
利用Spring扩展点模拟MyBatis的注解编程「知识点多多」「扩展点实战系列」- 第448篇
走进MyBatis源码一探Spring扩展点「知识点多多」「扩展点实战系列」- 第449篇
走进SpringBoot源码吃透Spring扩展点「扩展点实战系列」- 第450篇
导读
第一篇扩展点文章发表于2022-05-16,至今到这一篇文章耗时5个月左右
一方面是总结之前的文章,本文主要是对于这系列的扩展点概念和实战做个汇总。
对于Spring扩展点的系列文章,全网独有一份,绝对良心出品,如有雷同,请@我。
扩展点概念系列:
01.《SpringBoot/Spring扩展点系列之初出茅庐ApplicationContextInitializer》
https://mp.weixin.qq.com/s/rXxeWhGEvhDf2__Nk2_f8A
典型的应用场景是web应用中需要编程方式对应用上下文做初始化。比如,注册属性源(propertysources)或者针对上下文的环境信息environment激活相应的profile。
02.《SpringBoot/Spring扩展点系列之略有小成BeanDefinitionRegistryPostProcessor》
https://mp.weixin.qq.com/s/JNXOKfWnwCH5--QYqiqj4g
使用场景:动态注册bean,举例:
(1)mybatis-spring就是通过此扩展向spring容器中加入我们mapper的实现类的。(2)Feign 远程调用实现。
03.《SpringBoot/Spring扩展点系列之叱咤风云BeanFactoryPostProcessor》
https://mp.weixin.qq.com/s/_gGNZlJ4ARkTr1w1AcetDA
使用场景:
(1)对敏感信息的解密处理
数据库的连接配置中,用户名和密码都是明文配置的,这就存在泄漏风险,还有redis的连接配置、shiro的加密算法、rabbitmq的连接配置等等,凡是涉及到敏感信息的,都需要进行加密处理,信息安全非常重要。
配置的时候以密文配置,在真正用到之前在spring容器中进行解密,然后用解密后的信息进行真正的操作。
(2)Spring中占位符的处理
04.《SpringBoot/Spring扩展点系列之使用InstantiationAwareBeanPostProcessor模拟AOP实现》
https://mp.weixin.qq.com/s/r4F61PkVmZ3rTZOdTg8mAQ
BeanPostProcessor典型的应用场景时在AOP生成代理对象的时候,AOP代理需要创建被代理类的对象,才能对对象进行代理。根据代理的特点,通过在BeanPostProcessor#postProcessAfterInitialization方法执行的时候,对被代理对象进行增强,这样就可以生成新的代理对象。
05.《SpringBoot/Spring扩展点系列之SmartInstantiationAwareBeanPostProcessor确定执行哪一个构造方法》
https://mp.weixin.qq.com/s/cpOin3A9JF5yz17_JWft5Q
当一个bean中有两个构造方法的时候,一个无参构造方法,一个有参构造方法,那么spring在进行bean初始化的时候回默认调用无参的构造方法。
06.《SpringBoot/Spring扩展点系列之ApplicationContextAwareProcessor普通类获取Spring Bean》
https://mp.weixin.qq.com/s/UjSfjyR2epIlB6VH33QHZw
6个扩展点:
(1)EnvironmentAware:用于获取Enviroment的一个扩展类,这个变量非常有用, 可以获得系统内的所有参数。当然个人认为这个Aware没必要去扩展,因为Spring内部都可以通过注入的方式来直接获得。
(2)EmbeddedValueResolverAware:用于获取StringValueResolver的一个扩展类, StringValueResolver用于获取基于String类型的properties的变量,一般我们都用@Value的方式去获取,如果实现了这个Aware接口,把StringValueResolver缓存起来,通过这个类去获取String类型的变量,效果是一样的。
(3)ResourceLoaderAware:用于获取ResourceLoader的一个扩展类,ResourceLoader可以用于获取classpath内所有的资源对象,可以扩展此类来拿到ResourceLoader对象。
(4)ApplicationEventPublisherAware:用于获取ApplicationEventPublisher的一个扩展类,ApplicationEventPublisher可以用来发布事件,结合ApplicationListener来共同使用,下文在介绍ApplicationListener时会详细提到。这个对象也可以通过spring注入的方式来获得。
(5)MessageSourceAware:用于获取MessageSource的一个扩展类,MessageSource主要用来做国际化。
(6)ApplicationContextAware:用来获取ApplicationContext的一个扩展类,ApplicationContext应该是很多人非常熟悉的一个类了,就是spring上下文管理器,可以手动的获取任何在spring上下文注册的bean,我们经常扩展这个接口来缓存spring上下文,包装成静态方法。同时ApplicationContext也实现了BeanFactory,MessageSource,ApplicationEventPublisher等接口,也可以用来做相关接口的事情。
07.《SpringBoot/Spring扩展点系列之初始化之@PostConstruct、init-method、InitializingBean》
https://mp.weixin.qq.com/s/hHwlvtaUK2C5hE_I-eYEog
对于初始化数据常用的有3种实现方式:
(1)使用JSR-250规范定义的@Postconstruct注解。
(2)使用Spring提供的@Bean init-method标签。
(3)实现InitializingBean接口,实现afterPropertiesset()方法。
08.《SpringBoot/Spring扩展点系列之FactoryBean让你不在懵逼》
https://mp.weixin.qq.com/s/Q_dvZEM1FjRnLt1avy8BFw
FactoryBean在Spring中最为典型的一个应用就是用来创建AOP的代理对象:AOP实际上是Spring在运行时创建了一个代理对象,也就是说这个对象,是我们在运行时创建的,而不是一开始就定义好的,这很符合工厂方法模式。更形象地说,AOP代理对象通过Java的反射机制,在运行时创建了一个代理对象,在代理对象的目标方法中根据业务要求织入了相应的方法。这个对象在Spring中就是——ProxyFactoryBean。
09.《SpringBoot/Spring扩展点系列之SmartInitializingSingleton》
https://mp.weixin.qq.com/s/Mf4ovRiGtE_0x6aX7NGzZw
主要应用场合就是在所有单例bean创建完成之后,可以在该回调中做一些事情。
10.《SpringBoot/Spring扩展点系列之CommandLineRunner和ApplicationRunner实现缓存预热》
https://mp.weixin.qq.com/s/DEeO33DVQsAYLAcYYBjzkQ
用于应用服务启动时,加载一些数据和执行一些应用的初始化动作。举例说明:
(1)删除临时文件。
(2)缓存预热:项目启动时热加载数据库数据至缓存。
(3)清除缓存信息。
(4)读取配置文件信息。
(5)打印日志用于标识服务启动成功或者标识某些属性加载成功。
(6)设置属性值或者启动组件,例如开启某些组件的开关、一些应用级别缓存的加载、启动定时任务等等。
(7)需要使用main方法的入参。
11.《SpringBoot/Spring扩展点系列之初始化和销毁的3种办法》
https://mp.weixin.qq.com/s/JZAgefKuLcKV43KbSh4Ijg
(1)第一种,通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁 bean 之前进行的操作。
(2)第二种,通过 在xml 中定义 init-method和 destory-method 方法。
(3)第三种,通过bean 实现 InitializingBean和DisposableBean 接口。
扩展点实战系列:
01.《观察者模式实际应用场景「扩展点实战系列」》
https://mp.weixin.qq.com/s/ijO9lAAcjg9tsPRVt5wBGg
扩展点,ApplicationListener可以监听某个事件的event,触发时机可以穿插在业务方法执行过程中,用户可以自定义某个业务事件。
02.《服务信息上报+记录请求信息+监听项目运行状态还能这么玩
5个月的精华:Spring/SpringBoot扩展点手册:手册在手,编码无忧:全网独一份 - 第451篇相关推荐
- Java项目:宠物医院预约挂号系统(java+JSP+Spring+SpringBoot+MyBatis+html+layui+maven+Mysql)
源码获取:博客首页 "资源" 里下载! 一.项目简述 功能包括: 用户分为宠物,医生,管理员,宠物主人可进行注册选择医生挂号,选择日期,选择号源,医生可进行宠物接诊,管理员可对宠物 ...
- Java项目:教务管理系统(java+JSP+Spring+SpringBoot+layui+maven)
源码获取:博客首页 "资源" 里下载! 一.项目简述 功能包括: 三角色教师 管理员,学生教务管理系统,包括院系管理,课题综合管理,信息管理,以及差旅管理,学生选题等等. 二.项目 ...
- Spring可扩展Schema标签
基于Spring可扩展Schema提供自己定义配置支持 http://blog.csdn.net/cutesource/article/details/5864562 WARN : org.sprin ...
- Spring8:一些常用的Spring Bean扩展接口
前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格 ...
- springboot启动不了_七款高Star的开源SpringBoot扩展,助你的代码水平更上一层楼
易于使用且功能强大,这是很多开发者选择 SpringBoot 框架进行 Web 开发的原因,作为最流行的 Java 框架之一,当然少不了围绕它的诸多优质开源项目,今天 Gitee 介绍的就是七款非常实 ...
- 近100个Spring/SpringBoot常用注解汇总!
作者 | Guide 来源 | JavaGuide(微信公众号) 毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景.对于每一个注解我 ...
- java 扩展接口_详解常用的Spring Bean扩展接口
前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格 ...
- Java面试必问!Spring事务扩展机制(2)
TransactionAspectSupport#invokeWithinTransaction TransactionAspectSupport#invokeWithinTransaction 是 ...
- 接近8000字的Spring/SpringBoot常用注解总结!安排!
文章目录 0.前言 1. `@SpringBootApplication` 2. Spring Bean 相关 2.1. `@Autowired` 2.2. `Component`,`@Reposit ...
- Spring - InstantiationAwareBeanPostProcessor 扩展接口
文章目录 Pre org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor InstantiationA ...
最新文章
- 第十六届全国大学生智能汽车竞赛 讯飞智慧餐厅 全国总决赛竞赛规则
- linux下jetty简单配置
- log4jdbc oracle,通过weblogic配置log4jdbc数据源,在项目中使用该数据源,输出sql
- 2019编译ffepeg vs_2020/5-Win10下ffmpeg最简编译方法
- 申请Let's Encrypt的证书
- 银联再发道歉声明;印度发布吃鸡禁令;甘肃全省校园禁售辣条;波音面临50亿罚款;女子撕扯民警头发罚两百;这就是今天的大新闻。...
- miui11未升级android版本,MIUI 11稳定版正式推送,升级前你需要了解
- Javascript高级程序设计第二版第十二章--Event--笔记
- bz2解压命令_tar 命令
- revman软件_meta分析概述及RevMan软件安装教程
- Vue报错:sockjs.js?9be2:1627 GET http://192.168.43.88:8080/sockjs-node/info?t=1631603986586 net::ERR_CO
- zabbix客户端安装配置
- jquery.form.js的重置表单增加hidden重置代码
- SQL SERVER2017 安装程序无法与下载服务器联系。无法安装机器学习服务的问题解决方式...
- 微软放大招,惊现杨超越鼓励师编程插件!
- DIY新浪微博Android手机客户端
- 华为手机怎么导入主题_华为手机怎么安装主题?华为EMUI3.0-EMUI8.0主题安装教程...
- CSS之九宫格面试题
- 2021-2027全球与中国SD WAN托管服务市场现状及未来发展趋势
- 天灾面前的风险教育课:要给财产安不同的窝