標籤: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