历史文章(文章累计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篇相关推荐

  1. Java项目:宠物医院预约挂号系统(java+JSP+Spring+SpringBoot+MyBatis+html+layui+maven+Mysql)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能包括: 用户分为宠物,医生,管理员,宠物主人可进行注册选择医生挂号,选择日期,选择号源,医生可进行宠物接诊,管理员可对宠物 ...

  2. Java项目:教务管理系统(java+JSP+Spring+SpringBoot+layui+maven)

    源码获取:博客首页 "资源" 里下载! 一.项目简述 功能包括: 三角色教师 管理员,学生教务管理系统,包括院系管理,课题综合管理,信息管理,以及差旅管理,学生选题等等. 二.项目 ...

  3. Spring可扩展Schema标签

    基于Spring可扩展Schema提供自己定义配置支持 http://blog.csdn.net/cutesource/article/details/5864562 WARN : org.sprin ...

  4. Spring8:一些常用的Spring Bean扩展接口

    前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格 ...

  5. springboot启动不了_七款高Star的开源SpringBoot扩展,助你的代码水平更上一层楼

    易于使用且功能强大,这是很多开发者选择 SpringBoot 框架进行 Web 开发的原因,作为最流行的 Java 框架之一,当然少不了围绕它的诸多优质开源项目,今天 Gitee 介绍的就是七款非常实 ...

  6. 近100个Spring/SpringBoot常用注解汇总!

    作者 | Guide 来源 | JavaGuide(微信公众号) 毫不夸张地说,这篇文章介绍的 Spring/SpringBoot 常用注解基本已经涵盖你工作中遇到的大部分常用的场景.对于每一个注解我 ...

  7. java 扩展接口_详解常用的Spring Bean扩展接口

    前言 Spring是一款非常强大的框架,可以说是几乎所有的企业级Java项目使用了Spring,而Bean又是Spring框架的核心. Spring框架运用了非常多的设计模式,从整体上看,它的设计严格 ...

  8. Java面试必问!Spring事务扩展机制(2)

    TransactionAspectSupport#invokeWithinTransaction TransactionAspectSupport#invokeWithinTransaction 是 ...

  9. 接近8000字的Spring/SpringBoot常用注解总结!安排!

    文章目录 0.前言 1. `@SpringBootApplication` 2. Spring Bean 相关 2.1. `@Autowired` 2.2. `Component`,`@Reposit ...

  10. Spring - InstantiationAwareBeanPostProcessor 扩展接口

    文章目录 Pre org.springframework.beans.factory.config.InstantiationAwareBeanPostProcessor InstantiationA ...

最新文章

  1. 第十六届全国大学生智能汽车竞赛 讯飞智慧餐厅 全国总决赛竞赛规则
  2. linux下jetty简单配置
  3. log4jdbc oracle,通过weblogic配置log4jdbc数据源,在项目中使用该数据源,输出sql
  4. 2019编译ffepeg vs_2020/5-Win10下ffmpeg最简编译方法
  5. 申请Let's Encrypt的证书
  6. 银联再发道歉声明;印度发布吃鸡禁令;甘肃全省校园禁售辣条;波音面临50亿罚款;女子撕扯民警头发罚两百;这就是今天的大新闻。...
  7. miui11未升级android版本,MIUI 11稳定版正式推送,升级前你需要了解
  8. Javascript高级程序设计第二版第十二章--Event--笔记
  9. bz2解压命令_tar 命令
  10. revman软件_meta分析概述及RevMan软件安装教程
  11. Vue报错:sockjs.js?9be2:1627 GET http://192.168.43.88:8080/sockjs-node/info?t=1631603986586 net::ERR_CO
  12. zabbix客户端安装配置
  13. jquery.form.js的重置表单增加hidden重置代码
  14. SQL SERVER2017 安装程序无法与下载服务器联系。无法安装机器学习服务的问题解决方式...
  15. 微软放大招,惊现杨超越鼓励师编程插件!
  16. DIY新浪微博Android手机客户端
  17. 华为手机怎么导入主题_华为手机怎么安装主题?华为EMUI3.0-EMUI8.0主题安装教程...
  18. CSS之九宫格面试题
  19. 2021-2027全球与中国SD WAN托管服务市场现状及未来发展趋势
  20. 天灾面前的风险教育课:要给财产安不同的窝

热门文章

  1. 推荐系统的PMF - 概率矩阵分解和协同过滤
  2. SLAM【十】回环检测
  3. 计算机上没有端口DOT4,dot4_001端口
  4. SpringMVC的基本使用+原理,一篇囊括
  5. idea如何实现修改代码即时生效
  6. Eclipse BIRT报表开发工具安装教程
  7. 【粉丝福利】第二波 | 当当购书狂欢,满 400 减 230!下单充电速来!
  8. c语言文件断电保护,.如果计算机突然断电,存放在()的信息会丢失。
  9. 面试官:如何设计群聊消息的已读未读功能?
  10. Android:方向传感器