Spring容器初始化Bean、銷燬Bean前所做操作的定義方式彙總

1、通過@javax.annotation.PostConstruct和@javax.annotation.PreDestroy定義

package com.xiaochuange.platform.spring4;

import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * @Desc:
 * @Auther: spring
 * @Date: 2018-9-12 14:56
 */
@Component("initAndDestoryService")
public class InitAndDestoryService {

    // 銷燬之前執行
    @PreDestroy
    public void methodPreDestroy() {
        System.out.println("InitAndDestoryService @PreDestroy invoke...");
    }

    // 初始化之前執行
    @PostConstruct
    public void methodPostConstruct() {
        System.out.println("InitAndDestoryService @PostConstruct invoke...");
    }

}

2、通過xml配置文件指定init-method和destroy-method

package com.xiaochuange.platform.spring4;

/**
 * @Desc:
 * @Auther: spring
 * @Date: 2018-9-12 15:03
 */
public class XmlInitAndDestoryService {

    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    public void methodInit(){
        System.out.println("XmlInitAndDestoryService methodInit invoke..." + message);
    }

    public void methodDestory(){
        System.out.println("XmlInitAndDestoryService methodDestory invoke..." + message);
    }

}

applicationContext.xml

<bean id="xmlInitAndDestoryService"
      class="com.xiaochuange.platform.spring4.XmlInitAndDestoryService"
    init-method="methodInit" destroy-method="methodDestory">
    <property name="message" value="234"></property>
</bean>

3、通過bean實現InitializingBean和DisposableBean接口

package com.xiaochuange.platform.spring4;

import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;

/**
 * @Desc:
 * @Auther: spring
 * @Date: 2018-9-12 14:27
 */
public class InitializingBeanAndDisposableBeanService implements InitializingBean, DisposableBean {

    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    @Override
    public void destroy() throws Exception {
        // 銷燬時的操作
        System.out.println("InitializingBeanAndDisposableBeanService destroy() invoke..." + message);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        // 初始化時的操作
        System.out.println("InitializingBeanAndDisposableBeanService afterPropertiesSet() invoke..." + message);
    }

}

applicationContext.xml

<bean id="personService" class="com.xiaochuange.platform.spring4.InitializingBeanAndDisposableBeanService">
    <property name="message" value="123"></property>
</bean>

4、測試

package com.xiaochuange.platform.spring4;

import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @Desc:
 * @Auther: spring
 * @Date: 2018-9-12 14:45
 */
public class MainTest {
    public static void main(String[] args) {
        AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        InitializingBeanAndDisposableBeanService personService = (InitializingBeanAndDisposableBeanService) context.getBean("personService");
        InitAndDestoryService initAndDestoryService = (InitAndDestoryService) context.getBean("initAndDestoryService");
        XmlInitAndDestoryService xmlInitAndDestoryService = (XmlInitAndDestoryService) context.getBean("xmlInitAndDestoryService");
        context.registerShutdownHook();
        // 輸出如下:
//        InitAndDestoryService @PostConstruct invoke...
//        InitializingBeanAndDisposableBeanService afterPropertiesSet() invoke...123
//        XmlInitAndDestoryService methodInit invoke...234
//        XmlInitAndDestoryService methodDestory invoke...234
//        InitializingBeanAndDisposableBeanService destroy() invoke...123
//        InitAndDestoryService @PreDestroy invoke...
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章