浅谈Spring的InitializingBean和init-method
2016-03-14 17:28
295 查看
最近看别人写的代码中看到了一个[b]InitializingBean接口,果断查了一下是什么作用,如果什么理解不对的地方望知道的人回复我,谢谢!![/b]
[b]1.先谈一下init-method,用途:spring的xml配置文件中配置bean,自定义bean的初始化方法,xml代码如下:[/b]
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]
[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]
相关文章推荐
- java 内部类(整理)
- 转:java 重定向和转发的区别
- Java虚拟机工作原理详解 (一)
- Java多线程(五)、多线程其他知识简要介绍
- 礼拜一log~tag lib标签 & java ArrayList去重方式 & Mac本下对类声明的查询方法
- Java多线程(四)、线程池
- Java多线程(三)、线程同步
- Java多线程(二)、线程的生命周期和状态控制
- SpringBoot附录
- java 内部类
- poi利用反射机制封装导出方法
- Java多线程(一)、多线程的基本概念和使用
- 一个极简单的Retrofit和RxJava的小例子
- java实现邮件发送(带附件)
- 1、Java服务端JPush的应用【带源代码】
- java 实现图的宽度优先遍历
- Java RESTful Web Service相关概念
- Reverse Linked List II | Java最短代码实现
- MyEclipse连接MySQL数据库详细步骤
- spring-jar包详解整理(大合集)