2012-05-28 38 views
1

我对Java和Eclipse非常熟悉,我想我会学习一些关于Spring的知识以及如何在没有XML的情况下配置Spring。当我尝试运行,现在,我得到的异常初学者在没有XML的情况下配置Spring

May 28, 2012 8:08:33 AM org.springframework.context.support.AbstractApplicationContext prepareRefresh 
INFO: Refreshing org.spring[email protected]173e55db: startup date [Mon May 28 08:08:33 PDT 2012]; root of context hierarchy 
Exception in thread "main" java.lang.IllegalStateException: Cannot load configuration class: MessageConfig 
at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:346) 
at org.springframework.context.annotation.ConfigurationClassPostProcessor.postProcessBeanFactory(ConfigurationClassPostProcessor.java:222) 
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:681) 
at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:620) 
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:446) 
at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:73) 

我的课是非常简单的:

public class SpringMain { 
    public static void main(String[] args) { 
     AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(MessageConfig.class); 
     DefaultMessage dmsg = context.getBean("defaultMessage", DefaultMessage.class); 
     System.out.println(dmsg); 
     } 
    } 

@Configuration 
public class MessageConfig { 
    @Bean 
    public DefaultMessage defaultMessage() { return new DefaultMessage(); } 
} 

public class DefaultMessage { 
    public DefaultMessage() {} 

    private String message = "Spring is here."; 

    public String getMessage() { return message; } 

    public void setMessage(String message) { this.message = message; } 

    @Override 
    public String toString() { 
     return String.format("DefaultMessage[%s]", message); 
    } 
} 

我几乎补充说,似乎相关的任何jar文件。我的班级路线:

org.springframework.beans-3.1.1.RELEASE.jar 
org.springframework.context-3.1.1.RELEASE.jar 
org.springframework.core-3.1.1.RELEASE.jar 
commons-logging-1.1.1.jar 
org.springframework.context.support-3.1.1.RELEASE.jar 
org.springframework.asm-3.1.1.RELEASE.jar 
org.springframework.aop-3.1.1.RELEASE.jar 
org.springframework.aspects-3.1.1.RELEASE.jar 
org.springframework.expression-3.1.1.RELEASE.jar 
org.springframework.instrument.tomcat-3.1.1.RELEASE.jar 
org.springframework.instrument-3.1.1.RELEASE.jar 
org.springframework.jdbc-3.1.1.RELEASE.jar 
org.springframework.jms-3.1.1.RELEASE.jar 
org.springframework.orm-3.1.1.RELEASE.jar 
org.springframework.oxm-3.1.1.RELEASE.jar 
org.springframework.test-3.1.1.RELEASE.jar 
org.springframework.transaction-3.1.1.RELEASE.jar 
org.springframework.web.portlet-3.1.1.RELEASE.jar 
org.springframework.web.servlet-3.1.1.RELEASE.jar 
org.springframework.web.struts-3.1.1.RELEASE.jar 
org.springframework.web-3.1.1.RELEASE.jar 
cglib-2.2.2.jar 
asm-4.0.jar 
commons-codec.jar 
ivy.jar 
jets3t.jar 
commons-httpclient.jar 

那么我错过了什么?为什么它无法“加载配置类MessageConfig”?我使用jre7和spring 3.1.1。

感谢您的任何建议!

[编辑]

JigarJoshi建议我加调用堆栈的其余部分。它是:

Caused by: java.lang.VerifyError: class net.sf.cglib.core.DebuggingClassWriter overrides final method visit.(IILjava/lang/String;Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)V 
at java.lang.ClassLoader.defineClass1(Native Method) 
at java.lang.ClassLoader.defineClass(Unknown Source) 
at java.security.SecureClassLoader.defineClass(Unknown Source) 
at java.net.URLClassLoader.defineClass(Unknown Source) 
at java.net.URLClassLoader.access$100(Unknown Source) 
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 net.sf.cglib.core.AbstractClassGenerator.<init>(AbstractClassGenerator.java:38) 
at net.sf.cglib.core.KeyFactory$Generator.<init>(KeyFactory.java:127) 
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:112) 
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108) 
at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104) 
at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69) 
at org.springframework.context.annotation.ConfigurationClassEnhancer.newEnhancer(ConfigurationClassEnhancer.java:136) 
at org.springframework.context.annotation.ConfigurationClassEnhancer.enhance(ConfigurationClassEnhancer.java:109) 
at org.springframework.context.annotation.ConfigurationClassPostProcessor.enhanceConfigurationClasses(ConfigurationClassPostProcessor.java:336) 
+1

请问您能否添加异常堆栈跟踪的根本原因? –

+1

另外我建议不要包括什么是基本随机库。 –

+0

@JigarJoshi:不确定你的意思。当我尝试获取AnnotationConfigApplicationContext的实例时,我得到了崩溃。 我同意戴夫牛顿。我从一大堆图书馆开始,并加入越来越多的妄图杀死这个例外的东西。 – Russ

回答

0

我已经成功创建了一个没有任何xml配置的web应用程序。我建议您在您的MessageConfig类中执行以下操作。

  1. put @EnableWebMvc注解定义该类保存Spring Framework的MVC配置。

  2. extends WebMvcConfigurerAdapter,可以让你忽略了一些有用的功能,如addResourceHandlers(ResourceHandlerRegistry registry)

据我你缺乏这几点。

希望这可以帮助你。干杯。

相关问题