| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> Java知识库 -> SpringBoot/Spring扩展点系列之叱咤风云BeanFactoryPostProcessor - 第428篇 -> 正文阅读 |
|
[Java知识库]SpringBoot/Spring扩展点系列之叱咤风云BeanFactoryPostProcessor - 第428篇 |
历史文章(累计400+篇文章) SpringBoot使用EasyYapi对代码0侵入实现API接口一键发布到YApi - 第422篇 SpringBoot使用EasyYapi对代码0侵入实现API接口一键发布到YApi的进阶使用 - 第423篇 SpringBoot使用thymeleaf实现布局方案一,不懂就out了(循序渐进的超级详细讲解方式) - 第424篇 SpringBoot使用thymeleaf实现布局方案二,方案在手说走就走 - 第425篇 SpringBoot/Spring扩展点系列之初出茅庐ApplicationContextInitializer - 第426篇 悟纤:师傅,你在哪里哪里?您的爱徒呼叫你~ 师傅:徒儿,你啥时候嘴变得这么贫了。 悟纤:师傅,徒儿哪有呀~ 师傅:徒儿,话说你有啥问题呢? 悟纤:师傅,你看哦,我这里有一个连接数据库的配置类,比如userName,password,这些信息最终会交给数据源DataSource进行连接数据库。 如果password是明文的情况下,那么是可以连接成功的,但是如果给password加密了,就连接异常了。 师傅:那肯定得异常呢,你密码加密了,你都不认识密码了,数据源就更不认识了。对于数据源只认识明文的密码。 悟纤:那怎么办呐? 师傅:那就需要解密呀,这时候获取就可以接触扩展点BeanFactoryPostProcessor来修改Bean的属性值。 悟纤:那师傅,赶紧的呗,我已经被搞的寝食难安了。 师傅:学会这一招,你就能叱咤风云了~ 导读 ???????当我们有场景需要对类的属性进行修改或者对于加密的数据进行解密的时候,这时候BeanFactoryPostProcessor接口的postProcessBeanFactory就可以派上用场了。 (1)?《SpringBoot/Spring扩展点之初出茅庐ApplicationContextInitializer》 (2)?《SpringBoot/Spring扩展点之略有小成BeanDefinitionRegistryPostProcessor》 (3)《SpringBoot/Spring扩展点系列之叱咤风云BeanFactoryPostProcessor》 ???????这一节我们就来看看: 《SpringBoot/Spring扩展点系列之叱咤风云BeanFactoryPostProcessor》 一、BeanFactoryPostProcessor基本概念 1.1是什么? ???????BeanFactoryPostProcessor就是BeanFactory的后处理类。 Spring允许BeanFactoryPostProcessor在容器实例化任何其它bean之前读取配置元数据,并可以根据需要进行修改,例如可以把bean的scope从singleton改为prototype,也可以把property的值给修改掉。可以同时配置多个BeanFactoryPostProcessor,并通过设置'order'属性来控制各个BeanFactoryPostProcessor的执行次序。 注意:BeanFactoryPostProcessor是在spring容器加载了bean的定义文件之后,在bean实例化之前执行的。接口方法的入参是ConfigurrableListableBeanFactory,使用该参数,可以获取到相关bean的定义信息。 1.2?使用场景 (1)对敏感信息的解密处理 ???????数据库的连接配置中,用户名和密码都是明文配置的,这就存在泄漏风险,还有redis的连接配置、shiro的加密算法、rabbitmq的连接配置等等,凡是涉及到敏感信息的,都需要进行加密处理,信息安全非常重要。 ???????配置的时候以密文配置,在真正用到之前在spring容器中进行解密,然后用解密后的信息进行真正的操作。 (2)Spring中占位符的处理 1.3?其它说明 BeanFactoryPostProcessor可以在Bean实例化之前修改Bean的属性,但不适合在BeanFactoryPostProcessor中做Bean的实例化,这样会导致一些意想不到的副作用,就是不要把Spring玩坏了,若需要做Bean的实例化可以使用BeanPostProcessor (1)BeanFactoryPostProcessor允许使用者修改容器中的bean definitions。 (2)BeanFactoryPostProcessor可以与bean definitions打交道,但是千万不要进行bean实例化。 二、BeanFactoryPostProcessor扩展实现方式 方式一:使用@Configuration+ @Bean 方式初始化 方式二:使用@ComponentScan+ @Component方式初始化 接下来通过方式二来看下。 2.1?构建一个应用 ???????这里使用了上一节构建的应用,你可以接着或者重新构建一个新的Sprin Boot项目。 2.2?定义一个User ???????先构建一个User:
2.3?注入User ???????使用@Configuration注入User:
???????如果此时启动应用,获取user bean的话,打印userName值是WuQian。 2.3自定义BeanFactoryPostProcessor ???????自定义一个BeanFactoryPostProcessor,然后修改user的属性值:
???????自定义一个MyBeanFactoryPostProcessor实现BeanFactoryPostProcessor接口,重写postProcessBeanFactory()方法来实现对User Bean定义的修改 ???????可以在任意一个service类使用User,
???????启动应用看下结果: ???????从这里的控制台的信息的打印也可以看出前面的几个扩展点确实在BeanFactoryPostProcessor之前执行的。 ???????另外就是user对象的属性值确实是被替换了。 ?? |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 20:47:00- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |