Java如何在Spring中使用InitializingBean和DisposableBean接口?

在另一个示例中,如何在Spring中初始化和销毁bean?您将看到如何使用Spring配置init-method和初始化和销毁Bean destroy-method。

在以下示例中,您将看到如何使用Spring API实现相同的功能。在这种情况下,我们的类需要实现InitializingBean和DisposableBean。这些接口位于org.springframework.beans.factory包装下。

该InitializingBean接口要求我们实现该afterPropertiesSet()方法。该方法将成为我们bean的init方法。在destroy()这是在定义的合同法DisposableBean界面,我们会在把我们的bean的清理逻辑。

使用这种方法的缺点是我们的类必须使用Spring API。如果您想使用上述其他方法在Spring容器之外使用类,则是更好的方法。

现在,让我们来看一些实际的代码。

package org.nhooo.example.spring.destroy;

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

public class InitDisposeService implements InitializingBean, DisposableBean {

    /**
     * Do some processes.
     */
    public void doSomething() {
        System.out.println("InitDisposeService.doSomething");
    }

    /**
     * Initialize bean after property set.
     *
     * @throws Exception
     */
    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitDisposeService.afterPropertiesSet");
    }

    /**
     * Clean-up bean when the context is closed.
     *
     * @throws Exception
     */
    @Override
    public void destroy() throws Exception {
        System.out.println("InitDisposeService.destroy");
    }
}

与往常一样,我们定义Spring配置(init-dispose.xml)来注册我们的bean。在这种情况下,我们将创建一个ID为的bean,service并将使用InitDisposeService该类。

<?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 id="service"/>

</beans>

下面是一个小的Java程序,可用于运行我们的应用程序。这将加载Spring配置,从容器中获取bean并执行bean。我们将看到该afterPropertiesSet方法被调用。当上下文关闭时,该destroy方法也将执行。

package org.nhooo.example.spring.destroy;

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

public class InitDisposeDemo {
    public static void main(String[] args) {
        ConfigurableApplicationContext context =
            new ClassPathXmlApplicationContext("init-dispose.xml");

        InitDisposeService service =
            (InitDisposeService) context.getBean("service");
        service.doSomething();

        context.close();
    }
}

这是屏幕上显示的输出:

InitDisposeService.afterPropertiesSet
InitDisposeService.doSomething
InitDisposeService.destroy