簡體   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