SpringBeanの初期化方法
13723 ワード
Beanの初期化と破棄方法
初期化と破棄方法では、単一インスタンスのBeanがコンテナの作成時に自動的に呼び出されます.ただし、マルチインスタンスの構成Beanであれば、そのインスタンスを取得するときに呼び出されます.
InitMethod & destoryMethod
Beanを注入する際には、Beanの
init
とdestroy
の方法を指定することができ、この2つの方法は
であることが要求される.Initメソッドは、オブジェクトの作成が完了し、メンバー変数の付与が完了した後にが作成されます.
destroyメソッドはcontextが閉じられたときに呼び出されます.
public class Car {
public Car() {
System.out.println("Car.Car");
}
public void init() {
System.out.println("Car.init");
}
public void destroy() {
System.out.println("Car.destroy");
}
}
// Bean IOC
@Bean(initMethod = "init",destroyMethod = "destroy")
public Car car(){
return new Car();
}
Springコンテキストを作成し、コンソール出力が表示されます.
public class AnnotationConfigClassPath {
AnnotationConfigApplicationContext context;
@Before
public void init() {
context = new AnnotationConfigApplicationContext(MainConfig.class);
}
@Test
public void initComplete() {
System.out.println(" ");
}
}
コンソール出力ログは次のとおりです.
Car.Car
Car.init
Car.destroy
InitializingBean&DisposableBeanインタフェース
`@Bean` , Bean class `org.springframework.beans.factory.InitializingBean` , `afterPropertiesSet ` , `afterPropertiesSet()` ; `org.springframework.beans.factory.DisposableBean` , `destroy` 。
public class Car implements InitializingBean, DisposableBean {
public Car() {
System.out.println("Car.Car");
}
public void destroy() {
System.out.println("Car.destroy");
}
@Override
public void afterPropertiesSet() throws Exception {
System.out.println("Car.afterPropertiesSet");
}
}
PostConstruct&PreDestroy注記
この2つの注釈はJSR 250仕様の注釈に属し、Springではこの2つの注釈をサポートしており、Beanでパラメータなしの方法を指定して
@PostConstruct
または@PreDestory
注釈を追加してBeanの作成と破棄のライフサイクル方法を実現することができます.public class Car {
public Car() {
System.out.println("Car.Car");
}
@PostConstruct
public void postConstruct() {
System.out.println("Car.postConstruct");
}
@PreDestroy
public void preDestroy() throws Exception {
System.out.println("Car.preDestroy");
}
}
BeanPostProcessorインタフェース
文字通り、このインタフェースはSpringが提供するBeanの_背面プロセッサ_Beanに使用される宣言サイクルメソッド.このインタフェースには2つのメソッドがあります.Beanの作成が完了する前、およびBeanの初期化コールバックメソッドの前または後に呼び出されます(初期化コールバックメソッドは上記の複数の初期化メソッドに値します).メソッド名はそれぞれ
postProcessBeforeInitialization(Object bean,String beanName)
およびpostProcessBeforeInitialization(Object bean, String beanName)
で、beanは現在のclassで作成されたbeanインスタンスに値し、beanNameはSpringコンテナの現在のbeanの名前に値します.次のコードは、カスタムBeanPostProcessorを実装するものであり、このカスタムバックグラウンドプロセッサは、コンポーネントとしてSpringのコンテナにスキャンされる必要があることに注意してください.そうしないと、有効ではありません.注釈@ComponentScan
を追加することによって実装できます.@Configurable
@ComponentScan("com.zhoutao123.spring")
public class MainConfig {
}
@Component
public class CustomerBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName)
throws BeansException {
System.out.println("Car.postProcessBeforeInitialization");
return bean;
}
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {
System.out.println("Car.postProcessAfterInitialization");
return bean;
}
}