1. 程式人生 > >(轉)Spring 的 init-method 和 destory-method

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

instance valid utf-8 rsh sage imp jdb 中修改 實現類

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

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

第一種:[email protected] 和 @PreDestroy 方法 實現初始化和銷毀bean之前進行的操作

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

第三種是: 通過bean實現InitializingBean和 DisposableBean接口

1 [email protected]

和 @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();  
      
          
    }  
    }   

測試結果:

init
hello  spring02
hello  spring02
cleanUp

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

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

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

3 通過bean實現InitializingBean和 DisposableBean接口

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