豆Springコンテナのライフサイクル

豆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コンテナが自動的に呼び出されますが、主な機能やテストケースを手動で呼び出す必要があります

特定コード:SpringDemo3.demo2()


2.春の豆コンテナのライフサイクル(理解)

  1. Beanオブジェクトのインスタンスをインスタンス化
  2. パッケージには、プロパティのプロパティを移入します
  3. ビーンの実装BeanNameAware実行する場合setBeanName
  4. 豆やApplicationContextAwareはsetApplicationContext setBeanFactory BeanFacotryAware工場設定やコンテキストの目的を達成した場合
  5. そこにクラスがBeanPostProcessor(後処理ビーン)を実装している場合、postProcessBeforeInitializationを行いました
  6. ビーンの実装InitializingBean実行する場合afterPropertiesSet
  7. コール<bean init-method="init">クラスは、BeanPostProcessor(処理ビーン)を達成するためにpostProcessAfterInitializationの実装が存在する場合は、指定イニシャライザの初期化を
  8. ビジネス・プロセスの実行
  9. 豆実装DisposableBean場合は、実行が破壊します
  10. コールbean destroy-method="customerDestroy">破壊customerDestroyの指定方法を

最も重要なの中には:手順5と第七。

IDEは、次のように印刷され、上述の処理を達成します。

特定コード:SpringDemo3.demo3()


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;
        }
    }
}

次のように出力されます。

特定コード:SpringDemo3.demo4()

おすすめ

転載: www.cnblogs.com/weixuqin/p/11027841.html