如何将带注释的@Controller注入另一个通过XML配置的bean

时间:2012-07-16 20:28:32

标签: spring rest controller jms

我继承了一个代码库,通过两个渠道提供类似的服务:

  1. REST / HTTP - 由带注释的Spring控制器处理
  2. JMS - 由消息驱动的POJO处理
  3. 两个通道上的消息结构或多或少相似,因此控制器和JMS侦听器中存在大量冗余/重复处理逻辑。解决这个问题的一种方法是将公共逻辑提取到另一个组件中,并将该组件注入@Controller和JMS侦听器。

    假设我现在没有时间这样做。有没有办法可以将控制器注入JMS侦听器并调用相同的控制器方法,这些方法在REST请求到达时由Spring的调度程序servlet自动调用。由于控制器没有XML配置,如何将其引用注入JMS侦听器?我不想创建另一个具有不同“id”的控制器bean。

1 个答案:

答案 0 :(得分:2)

  

解决这个问题的一种方法是提取通用逻辑

它不是“单向”,它是唯一的方式。不仅因为将控制器注入JMS消息监听器是您可以对您的架构进行最尴尬的事情之一。但也因为Spring本身不会让你这样做。

在Spring MVC中,实际上有两个上下文:main(声明JMS侦听器)和DispatcherServlet(MVC)上下文。后者是前者的孩子,这意味着它可以从主要上下文访问bean(否则无法访问控制器中的服务和DAO),但不是相反。

  

假设我现在没有时间这样做

您当前的架构相当差的事实并不能证明它更糟糕。可能过去一些开发人员没有时间提取通用逻辑,因此重复。现在你想引入从JMS层到web层的非常不寻常的依赖...我宁愿忍受重复。

  

由于控制器没有XML配置,我如何获得其参考

仅供记录,如果您的控制器名为FooBarController,请执行以下操作:

@Resource
private FooBarController fooBarController;

可能会有效,但幸运的是,不是从父母到子女的情境。

相关问题