豆Springコンテナのライフサイクル
1. INITメソッドおよびメソッドDestoryは、方法
ときのSpring Beanの初期化Beanまたは破壊され、時にはいくつかの処理作業を行う必要があり、そう春は、Beanの作成と削除にBeanの2ライフサイクル・アプローチを呼び出すことができます。
以下のような:
bean id="xxx" class="xxx" init-method="init" destory-method="destory" />
Beanは、コンテナ容器豆コールDestoryは(スコープ=シングルトン有効)から除去コールINITにロードされたとき。初期化メソッドの名前と自分の名前を付けることができDestoryは
Webコンテナが自動的に呼び出されますが、主な機能やテストケースを手動で呼び出す必要があります
2.春の豆コンテナのライフサイクル(理解)
- Beanオブジェクトのインスタンスをインスタンス化
- パッケージには、プロパティのプロパティを移入します
- ビーンの実装BeanNameAware実行する場合setBeanName
- 豆やApplicationContextAwareはsetApplicationContext setBeanFactory BeanFacotryAware工場設定やコンテキストの目的を達成した場合
- そこにクラスがBeanPostProcessor(後処理ビーン)を実装している場合、postProcessBeforeInitializationを行いました
- ビーンの実装InitializingBean実行する場合afterPropertiesSet
- コール
<bean init-method="init">
クラスは、BeanPostProcessor(処理ビーン)を達成するためにpostProcessAfterInitializationの実装が存在する場合は、指定イニシャライザの初期化を - ビジネス・プロセスの実行
- 豆実装DisposableBean場合は、実行が破壊します
- コール
bean destroy-method="customerDestroy">
破壊customerDestroyの指定方法を
最も重要なの中には:手順5と第七。
IDEは、次のように印刷され、上述の処理を達成します。
3. beanpostprocessor役割
beanpostprocessorクラスは、クラス、クラス発生剤の過程で生成することができ、及びクラスメソッドを向上させることができます。
以下のコードは、私たちがpostProcessAfterInitializationの初期化方法を強化し、beanpostprocessorクラスです。Bean内のメソッド保存強化。
public class MyBeanPostProcessor implements BeanPostProcessor {
@Override
public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException {
// System.out.println("第五步:初始化前的方法...");
return bean;
}
@Override
public Object postProcessAfterInitialization(final Object bean, String beanName) throws BeansException {
// System.out.println("第八步:初始化后方法...");
//使用代理,构造匿名函数
if ("userDao".equals(beanName)) {
Object proxy = Proxy.newProxyInstance(bean.getClass().getClassLoader(), bean.getClass().getInterfaces(), new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
if ("save".equals(method.getName())) {
System.out.println("权限校验==========");
// 传入属性
return method.invoke(bean, args);
}
return method.invoke(bean, args);
}
});
return proxy;
} else {
return bean;
}
}
}
次のように出力されます。