2013-08-09 10 views
7

Ich verwende Anmerkungen, um dynamisch eine Bean zu erstellen, ich bekomme die folgenden Fehler.Klasse nicht gefunden mit JavaConfig

package demoproject; 

import org.springframework.context.annotation.Bean; 
import org.springframework.context.annotation.Configuration; 
@Configuration 
public class ProductFactory { 

    public ProductFactory() { 
     // TODO Auto-generated constructor stub 
    } 

    @Bean 
    public Product josh(){ 
     Product josh = new Battery(); 
     josh.setId("cdrw"); 
     josh.setPrice(100); 
     return josh; 
    } 
} 

web.xml

<!-- Bean for JavaConfig --> 
    <bean class='demoproject.ProductFactory' /> 
    <!-- be sure to include the JavaConfig bean post-processor --> 
    <bean class="org.springframework.config.java.process.ConfigurationPostProcessor"/> 

Fehlerprotokoll

Exception in thread "main" org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.springframework.config.java.process.ConfigurationPostProcessor] for bean with name 'org.springframework.config.java.process.ConfigurationPostProcessor#0' defined in class path resource [web.xml]; nested exception is java.lang.ClassNotFoundException: org.springframework.config.java.process.ConfigurationPostProcessor 
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1275) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:575) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1344) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:910) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:607) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139) 
    at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83) 
    at demoproject.ProductCreater.main(ProductCreater.java:31) 
Caused by: java.lang.ClassNotFoundException: org.springframework.config.java.process.ConfigurationPostProcessor 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.net.URLClassLoader$1.run(Unknown Source) 
    at java.security.AccessController.doPrivileged(Native Method) 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:260) 
    at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:416) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doResolveBeanClass(AbstractBeanFactory.java:1296) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1267) 
    ... 9 more 

Wie kann ich wissen, was den Fehler verursacht, und gibt es eine fix ich für diese versuchen kann?

+0

es Got hadnt I Frühjahr gesagt für Anmerkung zu suchen und scannen themy Paket –

Antwort

0

Sie haben spring-core auf Ihrem Laufzeitklassenpfad nicht. Sie müssen es mit der geeigneten Technik für Ihr Projektlayout hinzufügen, z. B. indem Sie es zu einem Maven POM hinzufügen, wie Simon es vorschlägt.

+0

Kommentar wurde entfernt, da sie auf eine andere Frage sehr ähnlich ist, und ich denke, dass sie überarbeitet, dass ein bisschen im Frühjahr 3. Natürlich könnte er eine ältere Version von Spring verwenden. –

+0

Er verwendet immer noch die XML-basierte Konfiguration. – chrylis

+0

Dies ist Frühling 3.2. Ich versuchte es mit der akzeptierten Antwort, die in der Duplikatsfrage als akzeptiert angenommen wurde. Jetzt bekomme ich "Keine Bohne namens 'Josh' ist definiert" –

16

ab Frühjahr 3.0 brauchen Sie keine org.springframework.config.java.process.ConfigurationPostProcessor mehr, einfach definieren Sie die Java-Config-Klasse als Bean innerhalb der XML-Config.

<bean class="demoproject.ProductFactory" /> 

versuchen entfernen

<bean class="org.springframework.config.java.process.ConfigurationPostProcessor"/> 
+0

Ich benutze Feder 3.2. Derselbe Fehler, der besagt, dass der Bean Josh nicht definiert ist –

+0

Danke. Ich habe veraltete Informationen, bis ich diesen Beitrag sehe. – tonga

+0

Warum ist es nicht auf Frühjahr Dokumentation aktualisiert – kaissun