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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                [TOC] # ApplicationContext與BeanFactory關系 ![](https://box.kancloud.cn/d2c5e8ecac968919fa318578b2c38423_1434x1342.png) ApplicationContext它是擴展BeanFactory接口。 BeanFactory它采取延遲加載的方案,只有真正在getBean時才會實例化Bean 在開發中我們一般使用的是ApplicationContext,真正使用的是其實現類, FileSystemXmlAppliCationContext 根據文件路徑獲取 ClassPathXmlApplicationContext 根據類路徑獲取 AppliCationContext它會在配置文件加載時,就會初始化Bean, 并且ApplicationContext它提供不同的應用層的Context實現。 例如在web開發中可以使用WebApplicationContext. # Bean實例化方式 ## 無參數構造 對于這種方式,注意Bean類中必須提供無參數構造 ~~~ <bean name="user" class="studySpring.User"></bean> ~~~ ## 靜態工廠方法 需要創建一個工廠類,在工廠類中提供一個static返回bean對象的方法就可以。 ~~~ <!-- 創建方式2:靜態工廠創建 調用UserFactory的createUser方法創建名為user2的對象.放入容器 --> <bean name="user2" class="hello.UserFactory" factory-method="createUser" ></bean> ~~~ UserFactory ~~~ public static User createUser() { System.out.println("靜態工廠創建User"); return new User(); } ~~~ ## 實例工廠方法 需要創建一個工廠類,在工廠類中提供一個非static的創建bean對象的方法,在配置文件中需要將工廠配置,還需要配置bean ~~~ <!-- 創建方式3:實例工廠創建 調用UserFactory對象的createUser2方法創建名為user3的對象.放入容器 --> <bean name="UserFactory" class="hello.UserFactory"></bean> <bean name="user3" factory-bean="UserFactory" factory-method="createUser2" ></bean> ~~~ UserFactory ~~~ public User createUser2() { System.out.println("實例工廠創建User"); return new User(); } ~~~ # Bean的作用域 ![](https://box.kancloud.cn/4008ff4e272bf27d53a4185ca437d671_494x258.png) 在bean聲明時它有一個scope屬性,它是用于描述bean的作用域。 可取值有: singleton:單例 代表在spring ioc容器中只有一個Bean實例 (默認的scope) prototype多例 每一次從spring容器中獲取時,都會返回一個新的實例 request 用在web開發中,將bean對象request.setAttribute()存儲到request域中 session 用在web開發中,將bean對象session.setAttribute()存儲到session域中 在開如常用的值是singleton與prototype # Bean的生命周期 ![](https://box.kancloud.cn/814f34b6ed89b87f070724604aafc8d5_1730x1338.png) 1. instantiate bean對象實例化 2. populate properties 封裝屬性 3. 如果Bean實現BeanNameAware執行setBeanName 4. 如果Bean實現BeanFactoryAwar或ApplicationContextAwar設置工廠setBeanFactory或上下文對象setApplicationContext 5. 如果存在類實現BeanPostProcessor(后處理Bean),執行postProcessBeforeInitialization 6. 如果Bean實現InitializingBean執行afterPropertiesSet 7. 調用自定義的init-method方法 8. 如果存在類實現BeanPostProcessor(處理Bean),執行postProcessAfterInitialization 9. 執行業務處理 10. 如果Bean實現DisposableBean執行destroy 11. 調用自定義的destroy-method 對于bean的生命周期方法: 第三步與第四步是讓Bean了解spring容器。 第五步與第八步 可以針對指定的Bean進行功能增強,這時一般會使用動態代理. 第六步與第十步:通過實現指定的接口來完成init與destroy操作 但是在開發中一般不使用第6步與第10步,原因是我們可以使用第7步與第11步來完成。 第7步與第11步的初始化與銷毀操作它無耦合,推薦使用的。但是必須在配置文件中指定初始化與銷毀的方法 ~~~ <bean name="user" class="studySpring.User" init-method="init" destroy-method="destory"></bean> ~~~ 然后在User類中寫init和destory方法 然后再寫測試方法 ~~~ // 1.創建容器對象,因為直接在src下,就寫applicationContext.xml ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); // 2.向容器要User對象 Object u = ac.getBean("user"); // 打印User對象 System.out.println(u); // 關閉容器,觸發銷毀方法,close方法在ClassPathXmlApplicationContext中 ac.close(); ~~~ 總結: 對于bean的生命周期,我們需要關注的主要有兩個方法: 1. 增強bean的功能可以使用后處理Bean, BeanPostProcessor 2. 如果需要初始化或銷毀操作我們可以使用init-method destroy-method 注意:destroy-method只對scope=singleton有效果。
                  <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>

                              哎呀哎呀视频在线观看