<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                # Spring `BeanPostProcessor`示例 > 原文: [https://howtodoinjava.com/spring-core/spring-bean-post-processors/](https://howtodoinjava.com/spring-core/spring-bean-post-processors/) **bean 后處理器**允許自定義修改 spring [bean 工廠](https://howtodoinjava.com/spring-core/different-spring-ioc-containers/)創建的新 bean 實例。 如果您想在 Spring 容器完成實例化,配置和初始化 bean 之后實現一些自定義邏輯,我們可以插入一個或多個`BeanPostProcessor`實現。 對于多個`BeanPostProcessor`實例,我們可以通過設置`order`屬性或實現[`Ordered`](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/core/Ordered.html)接口來控制順序。 ## 1\. Spring `BeanPostProcessor` `BeanPostProcessor`接口恰好由兩個回調方法組成,即`postProcessBeforeInitialization()`和`postProcessAfterInitialization()`。 對于由容器創建的每個 bean 實例,后處理器都會同時從容器獲取回調 – 在調用容器初始化方法之前以及任何 bean 初始化回調之后 。 Bean 后處理器通常檢查回調接口,或者可以使用代理包裝 Bean。 一些 Spring AOP 基礎結構類(例如[`AbstractAdvisingBeanPostProcessor`](https://github.com/spring-projects/spring-framework/blob/master/spring-aop/src/main/java/org/springframework/aop/framework/AbstractAdvisingBeanPostProcessor.java))被實現為 bean 后處理器,以提供代理包裝邏輯。 ## 1.1. 如何創建`BeanPostProcessor` 要在 Spring 創建一個 bean 后處理器: 1. 實現[`BeanPostProcessor`](https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/beans/factory/config/BeanPostProcessor.html)接口。 2. 實現回調方法。 `CustomBeanPostProcessor.java` ```java import org.springframework.beans.BeansException; import org.springframework.beans.factory.config.BeanPostProcessor; public class CustomBeanPostProcessor implements BeanPostProcessor { public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException { System.out.println("Called postProcessBeforeInitialization() for :" + beanName); return bean; } public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { System.out.println("Called postProcessAfterInitialization() for :" + beanName); return bean; } } ``` #### 1.2. 如何注冊`BeanPostProcessor` `ApplicationContext`自動檢測在實現`BeanPostProcessor`接口的配置元數據中定義的所有 bean。 它將這些 bean 注冊為后處理器,以便以后在 bean 創建時可以調用它們。 然后,Spring 將在調用初始化回調方法之前和之后將每個 bean 實例傳遞給這兩個方法,在這里您可以按自己喜歡的方式處理 bean 實例。 ```java <beans> <bean id="customBeanPostProcessor" class="com.howtodoinjava.demo.processors.CustomBeanPostProcessor" /> </beans> ``` ## 2\. 調用`BeanPostProcessor`方法時 通常,spring 的 DI 容器會執行以下操作來創建一個 bean,您需要: 1. 通過構造函數或工廠方法創建 Bean 實例 2. 設置值和對 bean 屬性的 bean 引用 3. 調用所有感知接口中定義的 setter 方法 4. 將 bean 實例傳遞給每個 bean 后處理器的`postProcessBeforeInitialization()`方法 5. 調用初始化回調方法 6. 將 bean 實例傳遞給每個 bean 后處理器的`postProcessAfterInitialization()`方法 7. Bean 已準備好使用 8. 關閉容器后,調用銷毀回調方法 ## 3\. Spring `BeanPostProcessor`示例 為了顯示示例用法,我正在使用`EmployeeDAOImpl`類,如下所示: `EmployeeDAOImpl.java` ```java public class EmployeeDAOImpl implements EmployeeDAO { public EmployeeDTO createNewEmployee() { EmployeeDTO e = new EmployeeDTO(); e.setId(1); e.setFirstName("Lokesh"); e.setLastName("Gupta"); return e; } public void initBean() { System.out.println("Init Bean for : EmployeeDAOImpl"); } public void destroyBean() { System.out.println("Init Bean for : EmployeeDAOImpl"); } } ``` 該 bean 及其后處理器的配置如下: `beans.xml` ```java <bean id="customBeanPostProcessor" class="com.howtodoinjava.demo.processors.CustomBeanPostProcessor" /> <bean id="dao" class="com.howtodoinjava.demo.dao.EmployeeDAOImpl" init-method="initBean" destroy-method="destroyBean"/> ``` 現在,啟動 DI 容器并查看輸出: `Demo.java` ```java ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml"); ``` `Console` ```java Called postProcessBeforeInitialization() for : dao Init Bean for : EmployeeDAOImpl Called postProcessAfterInitialization() for : dao ``` 顯然,在初始化方法之前和之后都調用了`BeanPostProcessor`方法。 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看