java - 从根上下文访问 bean 时出现 Spring NoSuchBeanDefinitionException

标签 java spring dependency-injection javabeans

我有一个根上下文文件 (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

网络.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。 我的信息工厂类

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

...
public MyInfo getInstance(PortletRequest request) {

  }
...

}

最佳答案

问题不在于配置本身,而在于您尝试恢复该特定 bean 的位置。

如果您尝试从父应用程序上下文中定义的 Bean 中注入(inject)在子 ApplicationContext (subContext.xml) 中定义的请求范围的 bean,您将不会能够“看到”那个特定的存在。

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

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

关于java - 从根上下文访问 bean 时出现 Spring NoSuchBeanDefinitionException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18662933/

相关文章:

java - 取消按钮 showDialogInput 问题

java - 如何将 mp3 文件分享到 Whatsapp? (安卓工作室)

用于 SQL 的 Java 准备语句

java - Spring JPA 自动扫描 jar 文件中的实体

php - Laravel:命令中的依赖注入(inject)

rust - 尝试在 Rust 中进行控制反转时未实现 `Send`

java - 使用反射来分配 float

java - Java 的高级方法调用层次结构生成?

java - Maven 构建因 Spring-cloud-contract-verifier 而失败

android - Dagger 2 引发 Component.Builder : @Component. Builder 缺少所需模块或组件的 setter 错误: