spring之 自定义Bean初始化和析构
2016-11-25 23:43
323 查看
springIOC 容易负责管理Bean的生命周期,允许你在它们的生命期特定时点执行自定义任务,你的任务应该封装在回调方法中,由spring IoC容器在核实的时候调用
下面的列表展示了SpringIoC容器管理Bean周期的步骤
① 构造程序或者工厂方法创建Bean实例
② 向Bean属性设置值和Bean引用
③ 调用初始化回调方法
④ Bean就绪
⑤ 容器关闭时,调用析构回调方法
Spring由三种识别初始化和析构回调方法的方式,
第一,你的Bean可以实现InitializingBean 和 DisposableBean生命周期接口,并且实现用于初始化和析构的afterPropertiesSet() 和destroy()方法
第二,你可以在Bean声明中设置init-method和destroy-method属性,指定回调方法名称
第三,可以用声明周期注解@PostConstruct和@PreDestroy注解初始化和析构回调方法
工作原理
先来考虑一个涉及结账功能的示例
下面的Cashier类可以用于购物车中产品的结账,
然后你在Ioc容器中声明一个名为cashier的收银员Bean
<bean id ="cashier1 "
class="com.shop.Cashier">
<property name="name" value="cashier1"/>
<property name="path" value="c:/cashier"/>
</bean>
但是,在main类中,如果你试图用这个收银员为购物车结账,将出现NullPointerException异常,原因是没有调用openFile方法进行初始化
你应该在哪里调用openFile初始化呢,在java中,初始化任务应该在构造方法中执行,但是这里不可以,你必须在设置了name和path方法之后才可以确定打开哪个文件
调用默认构造程序时,这些属性还没有设置,
所以,调用这些的最佳时机是在spring IoC容器设置了所有属性之后
这时可以用上面提到的三种方法,初始化和析构回调方法。
下面的列表展示了SpringIoC容器管理Bean周期的步骤
① 构造程序或者工厂方法创建Bean实例
② 向Bean属性设置值和Bean引用
③ 调用初始化回调方法
④ Bean就绪
⑤ 容器关闭时,调用析构回调方法
Spring由三种识别初始化和析构回调方法的方式,
第一,你的Bean可以实现InitializingBean 和 DisposableBean生命周期接口,并且实现用于初始化和析构的afterPropertiesSet() 和destroy()方法
第二,你可以在Bean声明中设置init-method和destroy-method属性,指定回调方法名称
第三,可以用声明周期注解@PostConstruct和@PreDestroy注解初始化和析构回调方法
工作原理
先来考虑一个涉及结账功能的示例
下面的Cashier类可以用于购物车中产品的结账,
public class Cashier { private String name; private String path; private BufferedWriter writer; public void setName(String name) { this.name = name; } public void setPath(String path) { this.path = path; } public void openFile() throws IOException{ File logFile = new File(path,name+".txt"); writer = new BufferedWriter( new OutputStreamWriter( new FileOutputStream(logFile,true))); } public void checkout(ShoppingCart cart) throws IOException{ double total = 0 ; for(Product product : cart.getItems()){ total+=product.getPrice(); } writer.write(new Date()+"\t"+total+"\r\n"); writer.flush(); } public void closeFile() throws IOException{ writer.close(); } }
然后你在Ioc容器中声明一个名为cashier的收银员Bean
<bean id ="cashier1 "
class="com.shop.Cashier">
<property name="name" value="cashier1"/>
<property name="path" value="c:/cashier"/>
</bean>
但是,在main类中,如果你试图用这个收银员为购物车结账,将出现NullPointerException异常,原因是没有调用openFile方法进行初始化
你应该在哪里调用openFile初始化呢,在java中,初始化任务应该在构造方法中执行,但是这里不可以,你必须在设置了name和path方法之后才可以确定打开哪个文件
调用默认构造程序时,这些属性还没有设置,
所以,调用这些的最佳时机是在spring IoC容器设置了所有属性之后
这时可以用上面提到的三种方法,初始化和析构回调方法。
相关文章推荐
- Spring入门学习——自定义Bean初始化和析构
- spring 自定义bean初始化及析构方法
- 随spring context初始化完成后init自定义bean
- spring详解:通过FactoryBean自定义工厂初始化Bean
- 关于spring加载applicationContext初始化bean顺序的问题
- spring的延迟初始化bean
- Spring定制bean的初始化和销毁工作
- 获得spring初始化的bean和ServletContext
- 在自定义标签子类获取Spring中注册的bean
- spring源码学习笔记-初始化(三) registerBeanPostProcessors
- Spring学习笔记-Bean初始化&销毁
- Spring中ApplicationContextAware接口用法-->解决AppicationContext.getBean('xxxx')时初始化多次数据库连接池问题
- Spring学习笔记 关于Bean属性的初始化
- 自定义Servlet监听器中使用Spring提供Bean的方法
- (精)Spring IOC核心源码学习III:bean标签和自定义标签实现原理
- Spring下的Bean初始化和销毁两种方式
- InvocationTargetException(Bean没有注入) 和 spring初始化构造函数
- Spring中Bean的初始化过程
- spring问题:初始化bean失败
- spring中bean初始化过程