在Spring中, InitializingBean和DisposableBean是两个标记接口,这是Spring在bean初始化和销毁时执行某些操作的有用方式。
- 对于实现了bean的InitializingBean,它将在设置所有bean属性之后运行
afterPropertiesSet()
。 - 对于由bean实现的DisposableBean,它将在Spring容器释放bean之后运行
destroy()
。
例
这是一个示例,向您展示如何使用InitializingBean和DisposableBean 。 一个CustomerService bean,用于实现InitializingBean和DisposableBean接口,并具有message属性。
package com.mkyong.customer.services;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.InitializingBean;
public class CustomerService implements InitializingBean, DisposableBean
{
String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public void afterPropertiesSet() throws Exception {
System.out.println("Init method after properties are set : " + message);
}
public void destroy() throws Exception {
System.out.println("Spring Container is destroy! Customer clean up");
}
}
文件:Spring-Customer.xml
<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-2.5.xsd">
<bean id="customerService" class="com.mkyong.customer.services.CustomerService">
<property name="message" value="i'm property message" />
</bean>
</beans>
运行
package com.mkyong.common;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.mkyong.customer.services.CustomerService;
public class App
{
public static void main( String[] args )
{
ConfigurableApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"Spring-Customer.xml"});
CustomerService cust = (CustomerService)context.getBean("customerService");
System.out.println(cust);
context.close();
}
}
ConfigurableApplicationContext.close()将关闭应用程序上下文,释放所有资源并破坏所有缓存的单例bean。 仅用于destroy()
方法演示目的🙂
输出量
Init method after properties are set : im property message
com.mkyong.customer.services.CustomerService@47393f
...
INFO: Destroying singletons in org.springframework.beans.factory.
support.DefaultListableBeanFactory@77158a:
defining beans [customerService]; root of factory hierarchy
Spring Container is destroy! Customer clean up
设置message属性后,将调用afterPropertiesSet()方法。 而destroy()方法是在context.close()之后调用的;
想法...
我不建议使用InitializingBean和DisposableBean接口,因为它会将您的代码紧密耦合到Spring。 更好的方法应该是在bean配置文件中指定init-method和destroy-method属性。
下载源代码
参考文献
标签: 春天
翻译自: https://mkyong.com/spring/spring-initializingbean-and-disposablebean-example/