在Spring完成上下文初始化完成后, InitializingBean的实现类中重写的 afterPropertiesSet
方法并未执行.
public interface InitializingBean { /** * Invoked by a BeanFactory after it has set all bean properties supplied * (and satisfied BeanFactoryAware and ApplicationContextAware). * <p>This method allows the bean instance to perform initialization only * possible when all bean properties have been set and to throw an * exception in the event of misconfiguration. * @throws Exception in the event of misconfiguration (such * as failure to set an essential property) or if initialization fails. */ void afterPropertiesSet() throws Exception; }
由于此接口的方法afterPropertiesSet是在对象的所有属性被初始化后才会调用。当Spring的配置文件中设置类初始默认为”延迟初始”( default-lazy-init="true"
,此值默认为false)时,
类对象如果不被使用,则不会实例化该类对象。所以 InitializingBean子类不能用于在容器启动时进行初始化的工作,则应使用Spring提供的 ApplicationListener
接口来进行程序的初始化工作。
另外,如果需要InitializingBean子类对象在Spring容器启动时就初始化并则容器调用afterPropertiesSet方法则需要在类上增加 org.springframework.context.annotation.Lazy
注解并设置为false即可(也可通过spring配置bean时添加 lazy-init="false"
)。
观点仅代表自己,期待你的留言。