2

ルート コンテキスト ファイル (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>

ポートレット.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) {

  }
...

}
4

1 に答える 1

1

これに関する問題は、構成自体に関するものではなく、その特定の Bean を回復しようとしている場所に関するものです。

親アプリケーションコンテキストで定義された Bean 内から、子 ApplicationContext (subContext.xml) で定義されたリクエストスコープの Bean を注入しようとすると、リスナー (applicationContext.xml) によって指定されたものはできません。その特定のことを「参照してください」。

この関係は逆方向に働きます。子は、親コンテナーで定義されているすべてを実際に見ることができます。

解決策の 1 つは、リクエスト プロキシを親に移動することです。これらはプロキシであるためです。ただし、その特定の Bean を使用しようとしたときに利用可能なリクエストがない場合、ランタイムがスローされます。

于 2014-11-18T11:38:17.647 に答える