Java 将@Controller注入另一个Springbean
在一个spring mvc项目中,我想将@Controller注入另一个bean中,如下所示:Java 将@Controller注入另一个Springbean,java,spring,spring-mvc,dependency-injection,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(它确实起作
@Controller
public class MyController {
..
}
@Component
public class SomeSpringBean {
@Resource
private MyController myController;
..
}
这似乎不起作用,尽管@Controller注释是@Component的专门化,就像@Service(它确实起作用)一样:
我还尝试直接从ApplicationContext获取bean
我不想讨论我为什么要注入控制器,而是应该创建一个额外的抽象级别并注入它:)我假设您的
SomeSpringBean
类是由ContextLoaderListener
加载的根上下文扫描的组件
我假设您的
@Controller
注释类由DispatcherServlet
加载的servlet上下文扫描
在这种情况下,根上下文不能访问servlet上下文中的bean。只有相反的是正确的
您需要将SomeSpringBean
类放在其他一些包中,这些包必须由servlet上下文扫描
如果我的假设是错误的,请添加您的上下文配置
这不是一个好主意
@Controller
bean将由DispatcherServlet
的HandlerMapping
堆栈管理。我想不出你想从@Controller
bean中得到什么。这个消息意味着在定义了某个Springbean的Spring上下文中没有MyController
(要么控制器在Dispatcher Servlet上下文中-(但这将不可避免地导致讨论:-)),要么根本不是自动屏蔽的。注意:当您按类型自动连线时,即您知道它的类型是MyController,您应该使用@Autowired
或@Inject
来代替,@Resource
用于按名称连线bean-使用仅针对Spring的@Resource
的“后退”行为不是一个好的做法。宾果!这又是两个应用程序上下文。谢谢至于我为什么要这么做——控制器公开REST服务,这些服务由外部客户机使用。除此之外,我还希望在不同的模型中包含相同服务的结果。我得换一种方式。
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com..Mycontroller] is defined