我實現日誌寫接口下面的類(@Inject和@Named註釋給NoSuchBeanDefinitionException
所有與這些名字自定義類不是標準Java包 類
)包裝內的COM .springprogramming.spring.test.model
@Component
public class ConsoleWriter implements LogWriter{
public void write(String st){
System.out.println("in Console writer "+st);
}
}
@Component("fileWriter")
public class FileWriter implements LogWriter{
public void write(String st){
System.out.println("in Console writer "+st);
}
}
public interface LogWriter {
public void write(String st);
}
@Component
public class Logger {
private ConsoleWriter consoleWriter;
private LogWriter fileWriter;
@Inject
public void setConsoleWriter(ConsoleWriter consoleWriter) {
this.consoleWriter = consoleWriter;
}
@Inject
@Named(value="fileWriter")
public void setFileWriter(LogWriter fileWriter) {
this.fileWriter = fileWriter;
}
public void writeFile(String text){
fileWriter.write(text);
}
public void writeConsole(String text){
if(consoleWriter!=null)
consoleWriter.write(text);
}
@PostConstruct
public void init(){
System.out.println("init");
}
@PreDestroy
public void destroy(){
System.out.println("destroy");
}
}
我想跳過我的Spring配置XML文件(APP-config.xml文件)中定義的豆,因此利用組件掃描我的基地裏麪包:
<context:annotation-config></context:annotation-config>
<context:component-scan
base-package="com.springprogramming.spring.test.model">
</context:component-scan>
現在在我的主類(App3.java)
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("/com/springprogramming/spring/test/beans/app-config.xml");
Logger logger = (Logger)context.getBean("logger");
logger.writeConsole("HI ");
logger.writeFile("Hello");
((ClassPathXmlApplicationContext)context).close();
}
當我運行這個程序,我得到錯誤(當我使用@Named與@注入了我的setFileWriter方法,我得到以下異常。 如果我刪除@Named註釋,它執行罰款
org.springframework.beans.factory.NoSuchBeanDefinitionException:未找到類型的 預選賽豆 [com.springprogramming.spring.test.model.LogWriter對於 依賴:預計至少有1個bean符合自動連線 這個依賴關係的候選者。
這個程序有什麼問題? 在此先感謝。
感謝hotzst的答案,我實際上在學習註釋並試着嘗試使用不同的註釋。因此,我嘗試了各種組合的字段以及setter方法來檢查其用法:) –