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

浅谈Spring的InitializingBean和init-method

2016-03-14 17:28 295 查看
最近看别人写的代码中看到了一个[b]InitializingBean接口,果断查了一下是什么作用,如果什么理解不对的地方望知道的人回复我,谢谢!![/b]
[b]1.先谈一下init-method,用途:spring的xml配置文件中配置bean,自定义bean的初始化方法,xml代码如下:[/b]
<bean id="testBean" class="TestClass" init-method="initialize"/>
此处TestClass类的初始化方法为initialize


2.[b]InitializingBean接口:如果不用init-method,我们可以将我们的bean实现InitializingBean接口,复写afterPropertiesSet方法(此时可以不用再spring的xml配置文件中配置bean,我们可以用注解来配置bean)。Spring在设置完一个bean所有的属性后,如果bean实现了InitializingBean接口,afterPropertiesSet方法就会被调用。[/b]
[b]2.1.[b]InitializingBean接口注意事项[/b]:因为spring默认为单例,所以如果bean实现了InitializingBean接口则afterPropertiesSet方法只会被调用一次;否则每次创建bean时afterPropertiesSet方法都会被重新调用.[/b]
3.总结:init-method是用于自定义bean的初始化方法,和[b]InitializingBean接口的afterPropertiesSet方法逻辑上的同样的概念,可以理解为bean特定初始化代码块可以放在[b]InitializingBean接口的afterPropertiesSet方法中,也可以自定义方法名,然后在配置文件中配置init-method[b]。[/b][/b][/b]
[b]4.用哪个好?:有人说用[b]init-method好,因为一但bean实现了InitializingBean接口,那么这个bean的代码就和Spring耦合到一起了,但是[b]init-method内部原理用的是反射,较为消耗内存,但是我做过的项目中处处可见反射,这点内存的消耗我想可以忽略不计。[/b][/b][/b]
[b][b]5.另外注意:如果一个bean同时实现了这两种方式的初始化配置,则spring会先调用afterPropertiesSet方法,然后通过反射调用init-method,任何一个方法出错都会导致spring创建bean失败.如果afterPropertiesSet方法调用失败,也不会再继续执行init-mehtod方法.

[/b][/b]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: