文章目录
首先看源码:
package org.springframework.beans.factory;
public interface InitializingBean {
void afterPropertiesSet() throws Exception;
}
InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法。当然需要将类加到spring容器中;同样的还可以在配置bean的时候指定init方法,那这两个方法的关系是什么样子呢?使用哪一种方法呢?
spring中是怎么实现的?
通过查看spring的加载bean的源码类(AbstractAutowireCapableBeanFactory)中的invokeInitMethods方法:
结论
- spring提供了两种在初始化bean的时候执行方法,一是实现InitializingBean接口,实现afterPropertiesSet方法,二是在配置文件中同过init-method指定,两种方式可以同时使用
- 如果两个都实现,那会先执行afterPropertiesSet再执行init方法;如果调用afterPropertiesSet方法时出错,则不调用init-method指定的方法。
- 实现InitializingBean接口是直接调用afterPropertiesSet方法,比通过反射调用init-method指定的方法效率相对来说要高点。但是init-method方式消除了对spring的依赖;