Olá pessoal estou tentando aprender um pouco sobre Spring e caí num problema aqui tentando resolver um exercício…
O exercício foi retirado da apostila: http://www.tutorialspoint.com/spring/spring_tutorial.pdf - Capitulo 16 : página 81.
Esse exercício basicamente consiste em criar as configurações de Beans por Annotations e mostrar a mensagen HelloWorld no console.
ERRO
Fev 06, 2013 5:36:25 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@6da13f3d: startup date [Wed Feb 06 17:36:25 BRST 2013]; root of context hierarchy
Exception in thread "main" java.lang.IllegalStateException: Cannot load configuration class: based.config.configs.HelloWorldConfig
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)
at based.config.BasedConfig.main(BasedConfig.java:21)
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(ClassLoader.java:791)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
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)
... 6 more
Java Result: 1
CONSTRUÍDO COM SUCESSO (tempo total: 0 segundos)
Tenho as libs do SPRING, ASM e CGLIB inseridas em meu projeto.
Classe de Configuração: HelloWorldConfig
Classe modelo: HelloWorld
Classe “Starter”: BasedConfig
HelloWorldConfig
package based.config.configs;
import based.config.models.HelloWorld;
import org.springframework.context.annotation.*;
@Configuration
public class HelloWorldConfig {
@Bean
public HelloWorld helloWorld(){
return new HelloWorld();
}
}
HelloWorld
package based.config.models;
public class HelloWorld {
private String message;
public String getMessage() {
System.out.println("Sua mensagem: " + message);
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
BasedConfig
package based.config;
import based.config.configs.HelloWorldConfig;
import based.config.models.HelloWorld;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;
public class BasedConfig {
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(HelloWorldConfig.class);
HelloWorld helloWorld = ctx.getBean(HelloWorld.class);
helloWorld.setMessage("Hello World!");
helloWorld.getMessage();
}
}