繁体   English   中英

从根上下文访问Bean时出现Spring NoSuchBeanDefinitionException

[英]Spring NoSuchBeanDefinitionException when accessing a bean from root context

我有一个根上下文文件(applicationContext.xml)和一个子上下文文件(subContext.xml)。

当我尝试从subContext.xml中的applicationContext.xml访问Bean时,出现NoSuchBeanDefinitionException

subContext.xml bean:

<bean id="myInfo" factory-bean="myInfoFactory"
    factory-method="getInstance" scope="request">
    <aop:scoped-proxy proxy-target-class="true" />

applicationContext.xml bean:

<bean id="myInfoFactory"
    class="org.wcw.factory.MyInfoFactory" />

我得到的错误是

org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'myInfoFactory' is defined

web.xml中

 <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>

portlet.xml中

<portlet-class>org.springframework.web.portlet.DispatcherPortlet</portlet-class>
    <init-param>
        <name>contextConfigLocation</name>
        <value>/WEB-INF/subContext.xml</value>
    </init-param>

如果我将myInfoFactory bean声明从applicationContext.xml移到subContext.xml,则不再抛出该异常。 不知道为什么在applicationContext.xml中声明时它不可见。 由于我的环境,我无法将bean永久移动到subContext.xml。 MyInfoFactory类

public class MyInfoFactory {
private Logger log;
@Autowired
private PortletRequest request;

...
public MyInfo getInstance(PortletRequest request) {

  }
...

}

这个问题不关乎配置本身,而是关乎您试图在哪里恢复该特定的bean。

如果尝试从父应用程序上下文中定义的Bean注入子ApplicationContext(subContext.xml)中定义的请求范围的Bean,则侦听器(applicationContext.xml)给出的Bean将无法插入“看到”那个特殊的东西。

这种关系在另一个方向上起作用。 子级实际上可以看到父级容器中定义的每个子级。

一种解决方案是将您的请求代理移至父级,因为您可以做到这一点。 但是,如果在尝试使用该特定bean时没有可用请求,则会抛出运行时。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM