您的位置:首页 > 编程语言 > Java开发

spring 初始化

2016-02-29 00:00 519 查看
摘要: 工作中会有许许多多的业务要求我们在容器初始化到时候做一些事情:有的要求初始化后立即执行某个业务/功能;有的要求容器关闭前执行某个业务/功能;还有的要求容器初始化后执行某个动作并且只执行一次

1、实现InitializingBean, 在afterPropertiesSet里面初始化启动执行自定义业务/功能/动作。将bean代码耦合到srping中

@Component
public class ResetFieldFromDB implements InitializingBean{
@Override
public void afterPropertiesSet() throws Exception {
// TODO Auto-generated method stub
}
}


如果一个bean被定义为非单例的,那么afterPropertiesSetbean的每一个实例被创建时都会执行。

单例 bean的afterPropertiesSet只在bean第一次被实例时调用一次

2、在bean中注解@PostConstruct 获得初始化执行的资格。并且只执行一次

简单暴力,lz也搜索了网友的帖子,

1、有说注解失效的并没有启动即调用:具体是直接在类的方法上面暴力追加,

需要在父类的bean被加入了spring管理后即可正常执行(@component)

2、有说注解内插入数据库失效,简单说为Servie服务类内注解postConstruct。网友后续解答说需要在action中再调用一次

楼主采用1方法未见此问题(这种情况其实应该用步骤1的代码,因为这个方法仅执行一次,不适合再调用一次)

3、在bean中注解@PreDestroy,bean销毁前会执行指定动作

4、在bean中使用init方法实现,具体在xml定义中执行init-method

<bean id="someService" class="...SomeService" scope="singleton"
init-method="init"  destroy-method="cleanUp">
</bean>


需要注意的是Spring总是先处理bean定义的InitializingBean,然后才处理init-method。且init-method是反射实现的,不支持参数,该方法非单例时每一个实例被创建时都会执行

5、比较好的参考文档:http://blog.sina.com.cn/s/blog_6940cab30102uwma.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: