【问题标题】:Practical use of ApplicationContextAware in springSpring中ApplicationContextAware的实际使用
【发布时间】:2014-10-10 11:50:16
【问题描述】:

我曾经有机会使用 spring 只做一个项目,它的工作方式是

  1. 创建一个单例类(比如说 MySpringHelper),它具有 getBean(String beanName) 之类的方法
  2. getBean(String) 的作用是,它首先检查 applicationContext 是否存在,如果存在则使用相同的获取 bean,否则创建新的 applicationContext 并返回 bean
  3. 无论您在项目中的何处需要一个 bean,只需调用 MySpringHelper.getBean("abc")

记住这一点,当我学习spring时,我注意到接口“ApplicationContextAware”......我不确定什么时候需要这个,使用上述模式这样的接口似乎没有任何用处。还是上面的 Singleton MySpringHelper 模式/方法不正确??

期待从您的经验中学习

为了提供更多关于应用程序的细节,它就像一个 pdf 文件生成器,1 个 pdf 文件有 12-15 个不同的图表,所以 main 方法为每个图表运行 1 个线程,在这些图表逻辑中我们使用单例 MySpringHelper

【问题讨论】:

  • 当你可以自动执行应用上下文时,为什么还要手动执行?
  • 您的字符串类型解决方案不需要强制转换吗?也许你至少可以做类似MySpringHelper.getBean(ABC.class) 的事情?或者使用 Spring 的自动装配功能...

标签: spring applicationcontext


【解决方案1】:

为什么要检查 applicationContext 的存在?如果您的助手 bean 是在 xml 中配置的并且其中有 setter 方法,它应该在那里。在这种情况下,无需创建应用程序上下文。

对于您的情况,我建议您使用 Spring 注入 applicationContext 而不是使用 ApplicationContextAware。

【讨论】:

  • 在 ques 中添加了项目描述,它就像一个多线程项目,所以不知道哪个线程将首先启动并初始化 appContext ...猜测因此检查 ....
  • 那你为什么不直接注入 applicationContext 并让 spring 注入呢?
  • @Lav,您可以先启动应用程序上下文,确保它已加载(通过org.springframework.context.ApplicationListener<org.springframework.context.event.ContextRefreshedEvent> ),然后开始处理图表?
猜你喜欢
  • 2014-02-28
  • 2016-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-01-02
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多