2017-08-01 29 views
0

我正在使用Spring DI版本4.2。 我的「applicationContext.xml」內容如下。調用Spring中的postProcessBeforeInitialization(),init()和postProcessAfterInitialization()方法的順序

<bean id="bObj1" class="com.springExample.B" scope="prototype" init-method="init" destroy-method="destory" /> 

下面是我的班 「com.springExample.B」

public class B implements BeanPostProcessor { 


public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
    System.out.println("In class B, Method postProcessBeforeInitialization()"); 
    return bean; 
} 

public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 
    System.out.println("In class B, Method postProcessAfterInitialization()"); 
    return bean; 
} 

public void init() { 
    System.out.println("In class B, Method init()"); 
} 

public void m3() { 
    System.out.println("In class B, Method m3()"); 

} 

public void destory() { 
    System.out.println("In class B, Method destory()"); 
} 

}

我看過的生命週期方法的調用順序如下。

  1. postProcessBeforeInitialization()
  2. 的init()
  3. postProcessAfterInitialization()

我創建Spring容器並調用Bean的如下

ApplicationContext ac = new ClassPathXmlApplicationContext("ApplicationContext.xml");  
B b = ac.getBean("bObj1", B.class); 
b.m3(); 

我寫SOP聲明在類「com.springExample.B」的所有方法中。當我運行代碼時,我得到的輸出如下。

In class B, Method init() 
In class B, Method postProcessBeforeInitialization() 
In class B, Method init() 
In class B, Method postProcessAfterInitialization() 
In class B, Method m3() 

我不明白爲什麼init()方法是postProcessBeforeInitialization之前(稱呼)?

+0

能否請你告訴問題 – sForSujit

+0

@sForSujit您的B級 - 在我的問題增加了B級。 – noble

回答

0

當爲BeanPostProcessor實現單獨的類時。 其按預期工作。
下面是更新的班級和新班級。

public class B { 

public void init() { 
    System.out.println("In class B, Method init()"); 
} 

public void m3() { 
    System.out.println("In class B, Method m3()"); 
} 

public void destory() { 
    System.out.println("In class B, Method destory()"); 
} 
} 

BeanPostProcessorImpl類

public class BeanPostProcessorImpl implements BeanPostProcessor { 

public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { 
    System.out.println("In class BeanPostProcessorImpl, Method postProcessBeforeInitialization()"); 
    return bean; 
} 

public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { 
    System.out.println("In class BeanPostProcessorImpl, Method postProcessAfterInitialization()"); 
    return bean; 
} 
}