首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用ApplicationContextListener或@PostConstruct

使用ApplicationContextListener或@PostConstruct
EN

Stack Overflow用户
提问于 2013-08-07 14:18:29
回答 1查看 2.2K关注 0票数 0

在我们的一个bean中,我们正在内存中读取一些基于文件的数据。

最好是通过一个ApplicationContextListener (例如调用beans ()方法)来这样做,还是只在这个init()方法中添加一个@PostConstruct,这样容器就可以自动完成它了?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-07 14:27:33

您可以使用:

  1. @PostConstruct
  2. InitializingBean接口
  3. <bean class="your bean class" init-method="your init method"/>

属性:init方法:在设置bean属性之后要调用的自定义初始化方法的名称。该方法必须没有参数,但可能引发任何异常。这是实现Spring的InitializingBean接口或用PostConstruct注释标记方法的替代方法。

它们是可选的:如果您的程序是完全带注释的,那么就选择注释,如果使用XML,则选择XML (我不喜欢混合,您不需要问自己是否用annot或xml实现了一个特性)

编辑:

  • 上下文侦听器:将被调用每一次上下文刷新(通常在启动时一次)
  • InitializingBean@PostConstruct:每次创建bean时都调用bean的生命周期(取决于范围)

在您的情况下,使用上下文侦听器:

  1. 调用init()等待到bean的init()终止,但您可以确定在容器生命周期的哪个时间调用它。
  2. 你失去了偷懒的可能,
  3. 但获得从错误中恢复的可能性(可能接受在内存中不使用数据)

使用InitializingBean you:

  1. wire bean的作用域是"singleton“(否则每次连接bean时,调用init()方法),
  2. 如果出现故障,您就失去了恢复的可能性,因为bean的初始化周期不掌握在您手中(或者更难恢复)。
  3. 你获得了懒惰的可能性(启动时间减少了)

在您的示例中,如果您使用的是没有延迟init的单例bean,并且在发生故障时不需要错误恢复,则根本没有区别。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18105875

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档