【发布时间】:2015-09-27 12:43:11
【问题描述】:
我有以下实现 LogWriter 接口的类(
都是具有这些名称的自定义类,而不是标准的 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
公共类记录器{
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) 中定义的 bean,因此在我的基础包中使用组件扫描:
<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();
}
当我运行这个程序时,我得到了错误(当我在我的 setFileWriter 方法上使用 @Named 和 @Inject 时,我得到以下异常。 如果我删除 @Named 注释,它执行得很好
org.springframework.beans.factory.NoSuchBeanDefinitionException: 否 类型的限定 bean [com.springprogramming.spring.test.model.LogWriter] 找到 依赖项:预计至少有 1 个符合自动装配条件的 bean 这种依赖的候选者。
这个程序有什么问题? 提前致谢。
【问题讨论】:
标签: java spring dependency-injection