簡體   English   中英

沒有XML的Spring Bean Annotation

[英]Spring Bean Annotation with no XML

我正在盡力在這里使用很少甚至沒有XML。 我做了一個非常簡單的程序,但它不起作用。 希望有人可以幫助我。

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();
    }

}

接口

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);

   }

}

記錄儀

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();
    }

}

錯誤

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)

這是我的XML文件,但我試圖擺脫使用XML和注釋,所以我把這個簡單的理解程序作為實踐。

<?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>

這將沒有任何xml配置

public class App {

 public static void main(String[] args) {

  ApplicationContext ctx = new AnnotationConfigApplicationContext(Config.class);

  Logger logger = ctx.getBean(Logger.class);
  logger.writeConsole("Hello there");
  logger.writeFile("Hi again");
 }
}

配置類

@Configuration
@ComponentScan
public class Config {
}

控制台編寫者

@Component
public class ConsoleWriter implements LogWriter{

  public void write(String text) {
      System.out.println("Console Writer: "+text);

  }
}

的FileWriter

@Component
public class FileWriter implements LogWriter {
   public void write(String text) {
      System.out.println("FileWriter: " + text);
   }
}

Looger

@Component
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);
}

}

接口LogWriter

public interface LogWriter {

  public void write(String text);

}

假設您使用的是Spring 3.2。 你的App.java應該是這樣的:

@Configuration
@ComponentScan
public class App {

  public static void main(String[] args) {
    AnnotationConfigApplicationContext ctx = new    
            AnnotationConfigApplicationContext(App.class);

    Logger logger = ctx.getBean(Logger.class);

    logger.writeConsole("Hello there");
    logger.writeFile("Hi again");

    ctx.close();
  }

}

@Configuration:告訴Spring這個類是一個配置類

@ComponentScan:告訴Spring掃描該包中的所有類。

不再需要具有該起點的xml。

FileWriter,ConsoleWriter和Logger是組件。 定義組件時,可以在這些類上使用@Autowired批注。 您需要在這些類上添加@Component注釋。

請注意,@ Bean getLogger()方法將在運行時生成異常,因為Spring將找到兩個名為“logger”的定義。 因此,要使您的應用程序正確運行,您需要刪除該方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM