2017-08-01 13 views
0

私はSpring DIバージョン4.2を使用しています。 「applicationContext.xml」の内容は次のとおりです。以下は春のメソッド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()

私は春のコンテナを作成し、

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クラスを表示してくださいすることができます。 – noble

答えて

0

BeanPostProcessorのための別のクラスが実装されています。 期待通りに動作します。
下記は更新されたクラスと新しいクラスです。私の質問に追加されたクラスB -

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; 
} 
} 
関連する問題