spring生命周期,关于InitializingBean和init-method的疑问

InitializingBean 和 init-method都是初始化bean的方式。bean可以实现InitializingBean接口,也可以定义init-method方法,调用Bean的init-method方法。这是Spring为了降低对客户代码的侵入性,给bean的配置提供了init-method属性

这句 【这是Spring为了降低对客户代码的侵入性】怎么理解? 定义init-method这种方式不是也是只能在spring环境中运行吗?这样看它也是和spring耦合的呀?

阅读 1.6k
1 个回答
这是Spring为了降低对客户代码的侵入性

虽然不知道这个原文在哪,但可以这么理解:

如果通过实现 InitializingBean 这种方式来实现 init hook,那么就必须要改造现有的 Class,实现 InitializingBeanafterPropertiesSet 方法

可是我不想修改这个类,通过配置 init-method 的方式不是更好,方法都可以任意选择,不需要固定的 afterPropertiesSet

XML 方式:

<bean id="book" class="com.github.kongwu.Book" init-method="随便哪个无参方法">

Annotation 方式:

@Bean(initMethod = "随便哪个无参方法")
public Book book(){

}

这个侵入性只是说,你配置 init hook 的方式,而不是运行在哪。

实现InitializingBean需要修改现有 Class,所以侵入性强;而通过指定 init-method 的方式不需要修改,所以侵入性弱

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题