将@Controller注入另一个spring bean

时间:2014-01-06 21:53:52

标签: java spring spring-mvc dependency-injection

在一个spring mvc项目中,我想将一个@Controller注入一个不同的bean,如下所示:

@Controller
public class MyController {
  ..
}

@Component
public class SomeSpringBean {
  @Resource
  private MyController myController;

  ..
}

这似乎不起作用,虽然@Controller注释是@Component的特化,就像例如@Service(确实有效):

org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com..Mycontroller] is defined

我也尝试直接从ApplicationContext获取bean。

我想避免讨论为什么我要注入控制器,而我宁愿创建一个额外的抽象级别并注入它:)

1 个答案:

答案 0 :(得分:5)

我将假设您的SomeSpringBean类是由ContextLoaderListener加载的根上下文扫描的组件。

我将假设由@Controller加载的servlet上下文扫描您的DispatcherServlet带注释的类。

在这种情况下,根上下文无权访问servlet上下文中的bean。只有反过来才是真的。

您需要将SomeSpringBean类放在必须由servlet上下文扫描的其他包中。


如果我的假设有误,请添加您的上下文配置。


这不是一个好主意。 @Controller bean应由DispatcherServlet的{​​{1}}堆栈管理。我想不出你想从HandlerMapping bean得到的任何东西。