最初の applicationContext はweb.xml
;の一部としてロードされることに注意してください。これは以下で言及されています。
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>META-INF/spring/applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>myOwn-controller</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>META-INF/spring/applicationContext.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
以下のコードでは、もう 1 つ applicationContext を作成しようとします。
private static final ApplicationContext context =
new ClassPathXmlApplicationContext("beans.xml");
との違いを見るbeans.xml
applicationContext.xml
また、appliationContext.xml
under<META-INF/spring/>
が with で宣言されている場合<import resource="beans.xml"/>
、これはの同じ場所に をappliationContext.xml
ロードしています。beans.xml
META-INF/spring
appliationContext.xml
一方; コードで; 以下のように宣言されている場合
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
WEB-INF/classes
これはeclipse の OR でbeans.xml を見ていsrc/main/resources
ます。
beans.xml
[ at src/main/resources
thenを追加した場合はWEB-INF/classes
、WAR の作成中に at に配置される可能性があります。]
したがって、完全に2 つのファイルが検索されます。
applicationContext.xml
以下のようにインポート中にクラスパスルックアップを追加することで、この問題を解決しました
<import resource="classpath*:beans.xml" />
ClassPathXmlApplicationContext("beans.xml")
Javaコードの行を削除して、ロードされるApplicationContextが1つだけになるようにします。