Spring 后置處理器【1】 簡單介紹
一句話:bean 在初始化前或初始化后的瞬間,我自己添加一些業務邏輯
bean 后置處理器類的內容
簡單代碼
package com.hspedu.spring.bean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/**
* @Author:PigBrother
* @Date:2022/9/22
* @Description:ToDo
*/
public class MyBeanPostProcessor implements BeanPostProcessor {
/**
* Before : 說明在bean 初始化前被呼叫
* @param bean 在ioc 容器中, 我配置的bean 物件
* @param beanName 在ioc 容器中,bean 的 id
* @return bean 回傳處理后的bean 物件
* @throws BeansException
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// 寫業務邏輯:在bean 初始化前,修改其一些屬性
System.out.println("postProcessBeforeInitialization() 方法被呼叫");
System.out.println("bean = " + bean);
System.out.println("beanName = " + beanName);
return bean;
}
/**
* after : 說明在bean 初始化后被呼叫
* @param bean 在ioc 容器中, 我配置的bean 物件
* @param beanName 在ioc 容器中,bean 的 id
* @return bean 回傳處理后的bean 物件
* @throws BeansException
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// 寫業務邏輯:在bean 初始化前,修改其一些屬性
System.out.println("postProcessAfterInitialization() 方法被呼叫");
System.out.println("bean = " + bean);
System.out.println("beanName = " + beanName);
return bean;
}
}
代碼解讀
- 實作 BeanPostProcessor 介面
- postProcessBeforeInitialization 和 postProcessAfterInitialization 兩個方法
- 在兩個方法中寫業務邏輯
容器組態檔(即xml 檔案)

測驗代碼
測驗代碼
@Test
public void beanProcessorTest() {
ApplicationContext ioc = new ClassPathXmlApplicationContext("beans02.xml");
House house = ioc.getBean("house", House.class);
System.out.println(house);
// 關閉ioc 容器
((ClassPathXmlApplicationContext)ioc).close();
}
測驗結果

Spring 后置處理器的簡單應用
將容器內的所有bean的某一個屬性的值統一改為另一個值
有 AOP 的一點影子了
將大豪宅改成香港豪宅
package com.hspedu.spring.bean;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
/**
* @Author:PigBrother
* @Date:2022/9/22
* @Description:ToDo
*/
public class MyBeanPostProcessor implements BeanPostProcessor {
/**
* Before : 說明在bean 初始化前被呼叫
* @param bean 在ioc 容器中, 我配置的bean 物件
* @param beanName 在ioc 容器中,bean 的 id
* @return bean 回傳處理后的bean 物件
* @throws BeansException
*/
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// 寫業務邏輯:在bean 初始化前,修改其一些屬性
System.out.println("postProcessBeforeInitialization() 方法被呼叫; 將所有豪宅改成香港豪宅");
if (bean instanceof House) {
House house = (House) bean;
house.setName("香港豪宅");
}
return bean;
}
/**
* after : 說明在bean 初始化后被呼叫
* @param bean 在ioc 容器中, 我配置的bean 物件
* @param beanName 在ioc 容器中,bean 的 id
* @return bean 回傳處理后的bean 物件
* @throws BeansException
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
// 寫業務邏輯:在bean 初始化前,修改其一些屬性
System.out.println("postProcessAfterInitialization() 方法被呼叫");
System.out.println("bean = " + bean);
System.out.println("beanName = " + beanName);
return bean;
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/509300.html
標籤:其他
上一篇:JAVA中容器設計的進化史:從白盒到黑盒,再到躋身為設計模式之一的迭代器
下一篇:Dubbo架構設計及入門案例
