自定义bean的性质
生命周期回调
初始化回调
- @PostConstruct(支持的JSR250)
public class MyBean{
@PostConstruct
public void init(){}
}
- 实现InitializingBean中的afterPropertiesSet方法(已不建议使用,会增加bean的耦合)
public class MyBean implements InitalizingBean{
@Override
public void afterPropertiesSet throws Exception();
}
- 配置init-method
public class MyBean{public void init(){}}
<bean name = "myBean" class = "MyBean" init-method = "init"/>
or
@Bean(name = "myBean", initMethod = "init")
public MyBean myBean(){
return new MyBean();
}
销毁回调(必须上下文环境关闭的时候才会执行)
- @PreDestoy(支持的JSR250)
public class MyBean{
@PreDestory
public void destory(){}
}
- 实现DisposableBean中的destory方法(已不建议使用,会增加bean的耦合)
public class MyBean implements DisposableBean{
@Override
public void destory(){}
}
- 配置destory-method
public class MyBean{public void destory()}
<bean name = "myBean" class = "MyBean" destory-method = "destory">
or
@Bean(name = "myBean", destoryMethod = "destory")
public MyBean myBean(){
return new MyBean();
}
默认的初始化和销毁方法
当您编写初始化和销毁不使用特定于spring的 InitializingBean 和 DisposeBean 回调接口的方法回调时,您通常编写具有 init()、initialize()、dispose()等名称的方法。理想情况下,这样的生命周期回调方法的名称是跨项目标准化的,以便所有开发人员使用相同的方法名称,并确保一致性。
- 初始化
public class DefaultBlogService implements BlogService {
private BlogDao blogDao;
public void setBlogDao(BlogDao blogDao) {
this.blogDao = blogDao;
}
// this is (unsurprisingly) the initialization callback method
public void init() {
if (this.blogDao == null) {
throw new IllegalStateException("The [blogDao] property must be set.");
}
}
}
<beans default-init-method="init">
<bean id="blogService" class="com.foo.DefaultBlogService">
<property name="blogDao" ref="blogDao" />
</bean>
</beans>
- 销毁
public class DefaultBlogService implements BlogService {
private BlogDao blogDao;
public void setBlogDao(BlogDao blogDao) {
this.blogDao = blogDao;
}
// this is (unsurprisingly) the destory callback method
public void destory() {
if (this.blogDao != null) {
throw new IllegalStateException("The [blogDao] property must be destoryed.");
}
}
}
<beans default-destory-method="destory">
<bean id="blogService" class="com.foo.DefaultBlogService">
<property name="blogDao" ref="blogDao" />
</bean>
</beans>
生命周期机制结合使用
生命周期的回调可以混合使用,执行顺序为JSR250规定的注解--》实现初始化、销毁Bean接口的方法、BeanDefinition定义的初始化销毁方法