看代码:
定义一个Foo类
public class Foo {
定义一个初始化的方法
public void init(){
System.out.println("init method is called");
}
定义一个销毁方法
public void destory(){
System.out.println("destroy method is called");
}
}
//这个bean与之前的bean相比,多配置了两个东西,init-method 和 destory-method
//同时这两个特性的值对应就是class中的方法
//初始化就是指初始化当前bean
//销毁就是指销毁当前bean
//生命周期是指bean的谁的生命周期
//任何生命周期核心都是实例的创建和销毁
//这种创建和销毁在这里是由class中的方法负责的啊
//第一个问题:这些方法在何时调用?由谁来调用?
//容器来调用,容器如何来调用呢? 容器可以调用bean实例啊,bean实例就可以调用这些方法啊
//init方法在bean创建之后调用
//destroy方法在容器关闭之前调用!! 容器关闭是个什么概念呢? 还是说bean都销毁了,就等于是bean关闭了呢
//这里补充一个知识:bean的作用域不一样,destory方法调用时点就不一样
<bean id="foo" class="com.wiley.beginningspring.ch2.Foo"
init-method="init" destory-method="destory"/>
再来看一对代码:
//这段代码先按时序拆分一下:
1.先定义的方法
2.然后再添加注解
public class Bar{
//该注解表示一个方法:javax.annotation.PostConstruct
//该方法由谁来调用?应该还是spring容器
//在何时来调用呢?在bean创建之后,在初始化之前!!
//所以该方法要注解在init方法上
@PostConstruct
public void init() throws Exception{
System.out.println("init method is called");
}
//该注解表示一个方法:javax.annotation.PreDestory
//那该方法由谁来调用?
//在何时调用呢?在初始化之后,在销毁之前!!
//所以该方法要注解在destory方法上
@PreDestroy
public void destory() throws RuntimeException{
System.out.println("destory method is called");
}
}
<bean class="com.wiley.beginningspring.ch2.Bar"/>
//以上两个注解方法怎么才能调用呢?就是添加下面这个标签
//意思是吧注解配置到当前的spring环境中
//这样spring容器就可以调用这两个方法了
<context:annotation-config />
再来看一段代码:
定义一个类Baz 实现两个接口:InitializingBean,DisposableBean
public class Baz implements InitializingBean,DisposableBean{
在类中,首先重写afterPropertiesSet()方法:初始化属性
@Override
public void afterPropertiesSet() throws Exception{
System.out.println("init method invoked");
}
然后重写destroy()方法
@Override
public void destroy() throws Exception{
System.out.println("destory method invoked");
}
}
//这里就不用配置init-method属性和destroy-method属性了
//重写的方法按上述机制进行调用
<bean id="" class="com.wiley.beginningspring.ch2.Baz"/>