propertyplaceholderconfigurer проблема замены имени класса - PullRequest
1 голос
/ 22 декабря 2010

Следующий пример работает для «подстановки имени класса с помощью PropertyPlaceHolderConfigurer»:

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

Однако при переносе этого кода через (messages.properties, com.spring.ioc.TestClass и spring-config.xml) для веб-приложения, подстановка имени класса теперь завершается ошибкой.

Я запускаю веб-приложение на Tomcat через подключаемый модуль Eclipse.В файле 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 файл, но, похоже, это происходит после , выводится вышеуказанная ошибка.

Кто-нибудь знает, почему это так и как я могу преодолеть эту проблему?

Ответы [ 2 ]

0 голосов
/ 25 января 2011

У меня та же проблема с использованием Spring Batch. BeanFactory пытается загрузить класс до того, как произойдет подстановка для имени класса. Я закончил тем, что не использовал подстановку для имени класса, потому что это не является сильным требованием для меня. Вы можете попробовать:

  • расширить фабрику бинов, чтобы пропустить класс с не подставленной переменной
  • расширить фабрику бинов, чтобы загружать заполнитель в самом начале (так как lazy-init и propertyPlaceOrder зависят также от ошибки)
0 голосов
/ 22 декабря 2010

Я не включил его, но PropertyPlaceHolderConfigurer успешно находит файл messages.properties, но, похоже, это происходит после вывода вышеуказанной ошибки.

Я твердо верю, чтоPropertyPlaceHolderConfigurer не работает!(Если он не настроен, он не может.)

Добавить конфигуратор в конфигурацию пружины.

<context:property-placeholder location="classpath:messages.properties"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...