[英]What does postProcessBeforeInitialization means in Spring BeanPostProcessor?
在XML文件中
<bean id="triangle" class="com.company.aop.model.Triangle">
<property name="name" value="myTriangle"></property>
</bean>
<bean class="com.company.aop.DisplayNameBeanPostProcessor"></bean>
在DisplayNameBeanPostProcessor.java類中
public class DisplayNameBeanPostProcessor implements BeanPostProcessor{
@Override
public Object postProcessAfterInitialization(Object bean, String beanName)
throws BeansException {
// TODO Auto-generated method stub
if(bean instanceof Triangle) {
// System.out.println("Tr "+(((Triangle) bean).getName().toString()));
System.out.println("I am after intialisation");
}
return bean;
}
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
// TODO Auto-generated method stub
if(bean instanceof Triangle) {
System.out.println("Tr "+(((Triangle) bean).getName().toString()));
}
return bean;
}
}
現在,當我運行此代碼時,它將轉到帶有參數bean和beanName的postProcessBeforeInitialization()方法,並顯示消息“ myTriangle”。 在我的情況下,此bean具有諸如其名稱字段之類的信息,其值為“ myTriangle”。 但是方法簽名說,是在初始化之前,如果尚未初始化,傳遞給它的bean是什么? 和之間有什么區別
public Object postProcessAfterInitialization(Object bean, String beanName)
和
public Object postProcessBeforeInitialization(Object bean, String beanName)
為什么這條線
System.out.println("Tr "+(((Triangle) bean).getName().toString()));
如果在初始化之前調用了該方法,則在方法postProcessBeforeInitialization中打印名稱?
您可以在此處參考Spring文檔的5.8.1節。 這里的關鍵點是,“ postProcessBeforeInitialization”應理解為“ postProcessBeforeInitializationCallback”,而“ postProcessAfterInitialization”應理解為“ postProcessAfterInitializationCallback”。 因此,這些是在bean上的Spring容器運行初始化回調之前/之后的預處理器和后處理器。 這就是在這些方法的文檔傳送這里了。
對象postProcessBeforeInitialization(對象bean,字符串beanName)拋出BeansException
在任何bean初始化回調(例如InitializingBean的afterPropertiesSet或自定義init-method)之前,將此BeanPostProcessor應用於給定的新bean實例。 該bean將已經用屬性值填充。
請注意,它說“ 該bean將已經用屬性值填充 ”。 相似地
對象postProcessAfterInitialization(對象bean,字符串beanName)拋出BeansException
在任何bean初始化回調(例如InitializingBean的afterPropertiesSet或自定義的init-method)之后,將此BeanPostProcessor應用於給定的新bean實例。 該bean將已經用屬性值填充。
BeanPostProcessor Bean是一種特殊的Bean,它在任何其他Bean之前創建並與新創建的Bean交互。 將postProcessBeforeInitialization
和postProcessAfterInitialization
應用於spring創建的任何其他bean。
但是方法簽名說,是在初始化之前,如果尚未初始化,傳遞給它的bean是什么?
這里的初始化是指調用三角 bean的init方法,因此before和post調用將調用包裝在bean的init方法上。 在此之前,已經執行了構造函數和setter注入,這就是為什么bean具有實際值的原因。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.