Bean的生命周期可以表达为:Bean的定义——Bean的初始化——Bean的使用——Bean的销毁
在MainApp.java 里注册一个在 AbstractApplicationContext 类中声明的关闭 hook 的 registerShutdownHook() 方法。它将确保正常关闭,并且调用相关的 destroy 方法:
package com.sap;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
AbstractApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
HelloWorld obj = (HelloWorld) context.getBean("helloWorld");
obj.getMessage();
context.registerShutdownHook();
}
}
Java Bean的源代码:
package com.sap;
public class HelloWorld {
private String message;
public void setMessage(String message) {
this.message = message;
}
public HelloWorld() {
System.out.println("constructor called!");
}
public void getMessage() {
System.out.println("Your Message : " + message);
}
public void init() {
System.out.println("Bean is going through init.");
}
public void destroy() {
System.out.println("Bean will destroy now.");
}
}
beans.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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">
<bean id="helloWorld" class="com.sap.HelloWorld"
init-method="init" destroy-method="destroy">
<property name="message" value="Hello World!"/>
</bean>
</beans>
从控制台里看到了Bean的init和destroy方法被调用了:
从Spring Context框架实现能看出,如果Bean定义了custom init方法,就调用之:
要获取更多Jerry的原创文章,请关注公众号"汪子熙":