Java 未定义名为的bean异常
包com.mkyong.output; IOutputGenerator.javaJava 未定义名为的bean异常,java,spring,Java,Spring,包com.mkyong.output; IOutputGenerator.java public interface IOutputGenerator { public void generateOutput(); } 包com.mkyong.output; OutputHelper.java @Component public class OutputHelper { @Autowired IOutputGenerator outputGenerator;
public interface IOutputGenerator
{
public void generateOutput();
}
包com.mkyong.output;
OutputHelper.java
@Component
public class OutputHelper {
@Autowired
IOutputGenerator outputGenerator;
public void generateOutput() {
outputGenerator.generateOutput();
}
/*//DI via setter method
public void setOutputGenerator(IOutputGenerator outputGenerator) {
this.outputGenerator = outputGenerator;
}*/
}
包com.mkyong.output.impl
CsvOutputGenerator.java
@Component
public class CsvOutputGenerator implements IOutputGenerator {
public void generateOutput() {
System.out.println("This is Csv Output Generator");
}
}
SpringBeans.xml
<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-2.5.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<context:component-scan base-package="com.mkyong" />
</beans>
我在线程“main”org.springframework.beans.factory.NoSuchBeanDefinitionException中得到这个异常:没有定义名为“OutputHelper”的bean
尽管我已经将OutputHelper标记为组件。您好,我想您还没有在SpringXML配置中添加以下内容
xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
<mvc:annotation-driven/>
xmlns:mvc=”http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
您需要查看顶部异常并阅读整行内容。
我猜有一个异常是嵌套异常,就像@Autowired xxxxxx,表示Autowired失败。
我注意到:
@Autowired
IOutputGenerator outputGenerator;
及
因此,在默认情况下,类名用于@Autowired,您可以重写为
@Autowired
IOutputGenerator csvOutputGenerator;
注意:
“csvOutputGenerator”的第一个字母是小写的我已更改
OutputHelper output = (OutputHelper) context.getBean("OutputHelper");
到
这很有效。更简单的选择是在已经在应用程序上下文中注册的bean中启用注释,这意味着您可以只使用
@Autowired
,而不必使用context.getBean()手动获取所有bean。
只需将这一行添加到SpringBeans.xml中即可
如果你真的想了解你在做什么,阅读会有所帮助。OutputHelper的包定义是什么??请确保包“com.mkyong”@sidgate-package-updated中的类不是mvc应用程序。是否尝试此更改@自动接线输出发生器CSVOUTPUTGANTOR;我更改了OutputHelper output=(OutputHelper)context.getBean(“OutputHelper”);to OutputHelper output=(OutputHelper)context.getBean(“OutputHelper”);这是因为默认情况下,Spring会将组件的第一个字符小写,所以Outputhelper变成Outputhelper
OutputHelper output = (OutputHelper) context.getBean("OutputHelper");
OutputHelper output = (OutputHelper) context.getBean("outputHelper");