2010-12-21 204 views
1

下面的例子適用於「使用PropertyPlaceHolderConfigurer類名替換」:propertyplaceholderconfigurer類名替代問題

http://forum.springsource.org/showpost.php?p=228136&postcount=2

然而,在(messages.properties移植的代碼時,com.spring.ioc.TestClass ,和spring-config.xml)到Web應用程序,類名替換現在失敗。

我通過Eclipse插件在Tomcat上的webapp上運行。在web.xml中我有以下幾點:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring-config.xml</param-value> 
</context-param> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

在日誌中輸出以下信息:

282 [main] DEBUG org.springframework.beans.factory.support.DefaultListableBeanFactory - 
Ignoring bean class loading failure for bean 'test' 
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [${test.class}] for bean with name 'test' defined in ServletContext resource [/WEB-INF/spring-config.xml]; nested exception is java.lang.ClassNotFoundException: ${test.class} 
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1141) 
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:524) 
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1177) 
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:222) 
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:505) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:362) 
at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255) 
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199) 
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45) 
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3795) 
at org.apache.catalina.core.StandardContext.start(StandardContext.java:4252) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) 
at org.apache.catalina.core.StandardHost.start(StandardHost.java:736) 
at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1014) 
at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:443) 
at org.apache.catalina.core.StandardService.start(StandardService.java:448) 
at org.apache.catalina.core.StandardServer.start(StandardServer.java:700) 
at org.apache.catalina.startup.Catalina.start(Catalina.java:552) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
at java.lang.reflect.Method.invoke(Method.java:597) 
at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:295) 
at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:433) 
Caused by: java.lang.ClassNotFoundException: ${test.class} 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1438) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1284) 
at org.springframework.util.ClassUtils.forName(ClassUtils.java:211) 
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:385) 
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1138) 
... 23 more 

我沒有將它,但PropertyPlaceHolderConfigurer被成功定位messages.properties文件,但這似乎是之後發生的上述錯誤輸出。

有人知道爲什麼會出現這種情況,我該如何解決這個問題?

+1

我們需要查看您的`spring-config.xml` – skaffman 2010-12-21 23:53:24

+0

您的屬性文件位於何處?確保它在WEB-INF/classes – 2010-12-22 00:15:48

回答

0

我有使用Spring批處理相同的問題。 BeanFactory試圖在類替換髮生之前加載類。 我最後沒有使用類名替換,因爲它對我來說不是一個強大的要求。 您可以嘗試:

  • 以跳過類具有可變非取代延長bean工廠
  • 爲了延長bean工廠遇到第一次加載您的佔位符(因爲懶惰-init和依賴-on propertyPlaceOrder也會失敗)
0

我沒有將它,但 PropertyPlaceHolderConfigurer是 成功定位 messages.properties文件,但這個 似乎發生後,上述錯誤 輸出。

我強烈地相信PropertyPlaceHolderConfigurer不工作! (如果沒有配置則不能)。

將配置器添加到您的彈簧配置中。

<context:property-placeholder location="classpath:messages.properties"/>