(轉)Spring 的 init-method 和 destory-method

來源:互聯網
上載者:User

標籤:isp   auth   方便   執行   jdb   work   main   設計模式   span   

背景:今天在項目中看到spring中bean在初始化和登出時候的方法定義,之前沒有用過這種方式,在此記錄下,方便後期查看!

 

關於在spring 容器初始化 bean 和銷毀前所做的操作定義方式有三種:

第一種:通過@PostConstruct 和 @PreDestroy 方法 實現初始化和銷毀bean之前進行的操作

第二種是:通過 在xml中定義init-method 和 destory-method方法

第三種是: 通過bean實現InitializingBean和 DisposableBean介面

 

1 通過@PostConstruct 和 @PreDestroy 方法 實現初始化和銷毀bean之前進行的操作

 

2 通過 在xml中定義init-method 和 destory-method方法

在xml中配置 init-method和 destory-method方法,只是定義spring 容器在初始化bean 和容器銷毀之前的所做的操作

基於xml的配置只是一種方式:

直接上xml中設定檔,定義SpringBeans.xml:

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    xmlns:context="http://www.springframework.org/schema/context"    xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:tx="http://www.springframework.org/schema/tx"    xmlns:jpa="http://www.springframework.org/schema/data/jpa" xmlns:cache="http://www.springframework.org/schema/cache"    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd                        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd                        http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc.xsd                        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd                          http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd                        http://www.springframework.org/schema/cache http://www.springframework.org/schema/cache/spring-cache.xsd">    <bean id="personService" class="com.lxw.study.PersonService"        scope="singleton" init-method="init" destroy-method="cleanUp" /></beans>

 

ps:單例模式,表示spring容器中只存在一個bean,供程式調用

定義PersonService類:

package com.lxw.study;/**  * @author lxw  * @describe * @date 2017年7月25日 上午10:53:27  */public class PersonService  {         private String  message;                public String getMessage() {              return message;          }                    public void setMessage(String message) {              this.message = message;          }                                   public void init(){              System.out.println("init");          }          //  how  validate the  destory method is  a question          public void  cleanUp(){              System.out.println("cleanUp");          }      }  

相應的測試類別:

package com.lxw.study;import org.springframework.context.support.AbstractApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;/**  * @author lxw  * @describe * @date 2017年7月25日 上午10:53:59  */public class MainTest {        public static void main(String[] args) {                        AbstractApplicationContext  context =new  ClassPathXmlApplicationContext("SpringBeans.xml");                    PersonService  person = (PersonService)context.getBean("personService");                    person.setMessage("hello  spring01");                    PersonService  person_new = (PersonService)context.getBean("personService");          person_new.setMessage("hello  spring02");                    System.out.println(person.getMessage());          System.out.println(person_new.getMessage());          context.registerShutdownHook();                      }      }   

 

測試結果:

inithello  spring02hello  spring02cleanUp

 

 

 

ps:因為是單例模式,所以程式中修改的是同一個bean,正因為是單例模式,所以程式中的初始化和銷毀只執行一次。 

可以看出 init 方法和 clean up方法都已經執行了。

context.registerShutdownHook(); 是一個鉤子方法,當jvm關閉退出的時候會調用這個鉤子方法,在設計模式之 模板模式中 通過在抽象類別中定義這樣的鉤子方法由實作類別進行實現,這裡的實作類別是AbstractApplicationContext,這是spring 容器優雅關閉的方法。

 

 

 

3 通過bean實現InitializingBean和 DisposableBean介面

(轉)Spring 的 init-method 和 destory-method

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.