I am doing my best to use little to no XML here. I have made a very simple program but it is not working. Hoping someone could help me out.
public class App { public static void main(String[] args) { AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(Logger.class); Logger logger = ctx.getBean(Logger.class); logger.writeConsole("Hello there"); logger.writeFile("Hi again"); ctx.close(); } } Interface
public interface LogWriter { public void write(String text); } FileWriter
public class FileWriter implements LogWriter { public void write(String text) { System.out.println("FileWriter: " + text); } } ConsoleWriter
public class ConsoleWriter implements LogWriter{ public void write(String text) { System.out.println("Console Writer: "+text); } } Logger
public class Logger { @Autowired private ConsoleWriter consoleWriter; @Autowired private FileWriter fileWriter; public void setConsoleWriter(ConsoleWriter consoleWriter) { this.consoleWriter = consoleWriter; } public void setFileWriter(FileWriter fileWriter) { this.fileWriter = fileWriter; } public void writeFile(String text) { fileWriter.write(text); } public void writeConsole(String text) { consoleWriter.write(text); } @Bean public Logger getLogger(){ return new Logger(); } } Error
Jul 02, 2015 2:52:49 PM org.springframework.context.annotation.AnnotationConfigApplicationContext prepareRefresh INFO: Refreshing org.springframework.context.annotation.AnnotationConfigApplicationContext@246b179d: startup date [Thu Jul 02 14:52:49 CEST 2015]; root of context hierarchy Exception in thread "main" java.lang.NoSuchMethodError: org.springframework.core.GenericTypeResolver.resolveReturnTypeForGenericMethod(Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Class; at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getTypeForFactoryMethod(AbstractAutowireCapableBeanFactory.java:650) 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.DefaultListableBeanFactory.doGetBeanNamesForType(DefaultListableBeanFactory.java:356) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanNamesForType(DefaultListableBeanFactory.java:327) at org.springframework.context.support.AbstractApplicationContext.invokeBeanFactoryPostProcessors(AbstractApplicationContext.java:644) at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:461) at org.springframework.context.annotation.AnnotationConfigApplicationContext.<init>(AnnotationConfigApplicationContext.java:73) at com.main.application.App.main(App.java:10) This is my XML file but I am trying to get away from using XML and just annotations so I made this simple to understand program as practice.
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd"> <context:annotation-config></context:annotation-config> </beans>
Loggershould have@Configurationelse it won't be used as a configuration class. Next you should separate your configuration from the application code (single responsibility. Judging from the stack trace you have some mixing of jar files (jars from different versions of the framework).