spring InitializingBean 详解

305 阅读1分钟

文章目录

首先看源码:

package org.springframework.beans.factory;

public interface InitializingBean {

	void afterPropertiesSet() throws Exception;

}

InitializingBean接口为bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是继承该接口的类,在初始化bean的时候会执行该方法。当然需要将类加到spring容器中;同样的还可以在配置bean的时候指定init方法,那这两个方法的关系是什么样子呢?使用哪一种方法呢?

spring中是怎么实现的?

通过查看spring的加载bean的源码类(AbstractAutowireCapableBeanFactory)中的invokeInitMethods方法:

在这里插入图片描述

结论

  1. spring提供了两种在初始化bean的时候执行方法,一是实现InitializingBean接口,实现afterPropertiesSet方法,二是在配置文件中同过init-method指定,两种方式可以同时使用
  2. 如果两个都实现,那会先执行afterPropertiesSet再执行init方法;如果调用afterPropertiesSet方法时出错,则不调用init-method指定的方法。
  3. 实现InitializingBean接口是直接调用afterPropertiesSet方法,比通过反射调用init-method指定的方法效率相对来说要高点。但是init-method方式消除了对spring的依赖;