Spring之InitializingBean接口和DisposableBean接口的使用
1.InitializingBean
該接口的作用是:
允許一個(gè)bean在它的所有必須屬性被BeanFactory設(shè)置后,來執(zhí)行初始化的工作,該接口中只有一個(gè)方法,afterPropertiesSet
public interface InitializingBean { /** * Invoked by the containing {@code BeanFactory} after it has set all bean properties * and satisfied {@link BeanFactoryAware}, {@code ApplicationContextAware} etc. * <p>This method allows the bean instance to perform validation of its overall * configuration and final initialization when all bean properties have been set. * @throws Exception in the event of misconfiguration (such as failure to set an * essential property) or if initialization fails for any other reason */ void afterPropertiesSet() throws Exception; }
2.DisposableBean
該接口的作用是:允許在容器銷毀該bean的時(shí)候獲得一次回調(diào)。
DisposableBean接口也只規(guī)定了一個(gè)方法:destroy
public interface DisposableBean { /** * Invoked by the containing {@code BeanFactory} on destruction of a bean. * @throws Exception in case of shutdown errors. Exceptions will get logged * but not rethrown to allow other beans to release their resources as well. */ void destroy() throws Exception; }
3.案例演示
/** * 實(shí)現(xiàn)InitializingBean和DisposableBean接口 * @author dengp * */ public class User implements InitializingBean,DisposableBean{ private int id; private String name; private String beanName; public User(){ System.out.println("User 被實(shí)例化"); } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { System.out.println("設(shè)置:"+name); this.name = name; } public String getBeanName() { return beanName; } public void setBeanName(String beanName) { this.beanName = beanName; } @Override public String toString() { return "User [id=" + id + ", name=" + name + ", beanName=" + beanName + "]"; } @Override public void destroy() throws Exception { // TODO Auto-generated method stub System.out.println("destory ...."); } @Override public void afterPropertiesSet() throws Exception { System.out.println("afterPropertiesSet...."); } }
配置文件
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean class="com.dpb.pojo.User" id="user" > <property name="name" value="波波烤鴨"></property> </bean> </beans>
測(cè)試代碼
@Test public void test1() { ClassPathXmlApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); User user = ac.getBean(User.class); System.out.println(user); ac.registerShutdownHook(); }
輸出結(jié)果:
User 被實(shí)例化
設(shè)置:波波烤鴨
afterPropertiesSet....
User [id=0, name=波波烤鴨, beanName=null]
destory ....
通過輸出能夠顯示spring初始化bean的時(shí)候,如果bean實(shí)現(xiàn)了InitializingBean接口,會(huì)自動(dòng)調(diào)用afterPropertiesSet方法,在bean被銷毀的時(shí)候如果實(shí)現(xiàn)了DisposableBean接口會(huì)自動(dòng)回調(diào)destroy方法后然后再銷毀
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java獲取網(wǎng)絡(luò)圖片上傳到OSS的方法
這篇文章主要為大家詳細(xì)介紹了java獲取網(wǎng)絡(luò)圖片上傳到OSS,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-10-10Jdk1.8 HashMap實(shí)現(xiàn)原理詳細(xì)介紹
這篇文章主要介紹了Jdk1.8 HashMap實(shí)現(xiàn)原理詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2016-12-12Java對(duì)接阿里云短信服務(wù)保姆級(jí)教程(新手秒會(huì))
這篇文章主要介紹了如何在阿里云上申請(qǐng)短信服務(wù)以及如何使用Java代碼進(jìn)行對(duì)接,包括申請(qǐng)資質(zhì)、簽名和模板,以及編寫Java代碼整合成工具類進(jìn)行調(diào)用的步驟,需要的朋友可以參考下2024-12-12Spring中的spring-retry重試機(jī)制解析
這篇文章主要介紹了Spring中的spring-retry重試機(jī)制解析,spring-retry可以通過注解,在不入侵原有業(yè)務(wù)邏輯代碼的方式下,優(yōu)雅的實(shí)現(xiàn)重處理功能,在spring-retry中,所有配置都是基于簡(jiǎn)單注釋的,需要的朋友可以參考下2024-01-01解決Eclipse的Servers視圖中無法添加Tomcat6/Tomcat7的方法
這篇文章主要介紹了解決Eclipse的Servers視圖中無法添加Tomcat6/Tomcat7的方法的相關(guān)資料,需要的朋友可以參考下2017-02-02SpringBoot yml配置文件調(diào)用過程解析
這篇文章主要介紹了SpringBoot yml配置文件調(diào)用過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11SpringMVC中轉(zhuǎn)發(fā)與重定向的區(qū)別淺析
這篇文章主要給大家介紹了關(guān)于SpringMVC中轉(zhuǎn)發(fā)與重定向的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12基于Spark實(shí)現(xiàn)隨機(jī)森林代碼
這篇文章主要為大家詳細(xì)介紹了基于Spark實(shí)現(xiàn)隨機(jī)森林代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-08-08