Spring 找不到名为';OutputHelper';在类路径资源中定义

Spring 找不到名为';OutputHelper';在类路径资源中定义,spring,spring-bean,Spring,Spring Bean,我是春天的新手。我正在创建一个简单的项目,在这个项目中,我只是使用bean调用generateOutout()方法 IOutputGenerator接口: package mian.java; public interface IOutputGenerator { public void generateOutput(); } package mian.java; public class CsvOutputGenerator implements IOutputGenerator

我是春天的新手。我正在创建一个简单的项目,在这个项目中,我只是使用bean调用generateOutout()方法

IOutputGenerator接口:

package mian.java;

public interface IOutputGenerator {
    public void generateOutput();
}
package mian.java;

public class CsvOutputGenerator implements IOutputGenerator{
    public void generateOutput(){
        System.out.println("Csv Output Generator");
     }

 }
package mian.java;

public class JsonOutputGenerator implements IOutputGenerator {
    public void generateOutput(){
        System.out.println("Json Output Generator");
    }
}
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="OutputHelper" class="main.java.OutputHelper">
    <property name="outputGeneratorCsv" ref="CsvOutputGenerator" />
    </bean>

    <bean id="CsvOutputGenerator" class="main.java.CsvOutputGenerator" />
    <bean id="JsonOutputGenerator" class="main.java.JsonOutputGenerator" />

</beans>
CsvOutputGenerator.java(实现IOutputGenerator):

package mian.java;

public interface IOutputGenerator {
    public void generateOutput();
}
package mian.java;

public class CsvOutputGenerator implements IOutputGenerator{
    public void generateOutput(){
        System.out.println("Csv Output Generator");
     }

 }
package mian.java;

public class JsonOutputGenerator implements IOutputGenerator {
    public void generateOutput(){
        System.out.println("Json Output Generator");
    }
}
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="OutputHelper" class="main.java.OutputHelper">
    <property name="outputGeneratorCsv" ref="CsvOutputGenerator" />
    </bean>

    <bean id="CsvOutputGenerator" class="main.java.CsvOutputGenerator" />
    <bean id="JsonOutputGenerator" class="main.java.JsonOutputGenerator" />

</beans>
JsonOutputGenerator.java(实现IOutputGenerator):

package mian.java;

public interface IOutputGenerator {
    public void generateOutput();
}
package mian.java;

public class CsvOutputGenerator implements IOutputGenerator{
    public void generateOutput(){
        System.out.println("Csv Output Generator");
     }

 }
package mian.java;

public class JsonOutputGenerator implements IOutputGenerator {
    public void generateOutput(){
        System.out.println("Json Output Generator");
    }
}
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="OutputHelper" class="main.java.OutputHelper">
    <property name="outputGeneratorCsv" ref="CsvOutputGenerator" />
    </bean>

    <bean id="CsvOutputGenerator" class="main.java.CsvOutputGenerator" />
    <bean id="JsonOutputGenerator" class="main.java.JsonOutputGenerator" />

</beans>
OutputHelper.java: 包mian.java

public class OutputHelper {
    IOutputGenerator outputGeneratorCsv;
   IOutputGenerator outputGeneratorJson;


    public void generateOutput(){
        outputGeneratorCsv.generateOutput();
        outputGeneratorJson.generateOutput();
    }

public void setOutputGenerator(IOutputGenerator     outputGeneratorCsv,IOutputGenerator outputGeneratorJson){
        this.outputGeneratorCsv = outputGeneratorCsv;
        this.outputGeneratorJson = outputGeneratorJson;
    }
}
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;

 public class AppViaSpring {
    public static void main( String[] args )
    {
        ApplicationContext context = 
       new ClassPathXmlApplicationContext(new String[] {"Spring-Common.xml"});

        OutputHelper output = (OutputHelper)context.getBean("OutputHelper");
    output.generateOutput();

    }
}
AppViaSpring.java(主类): 包mian.java

public class OutputHelper {
    IOutputGenerator outputGeneratorCsv;
   IOutputGenerator outputGeneratorJson;


    public void generateOutput(){
        outputGeneratorCsv.generateOutput();
        outputGeneratorJson.generateOutput();
    }

public void setOutputGenerator(IOutputGenerator     outputGeneratorCsv,IOutputGenerator outputGeneratorJson){
        this.outputGeneratorCsv = outputGeneratorCsv;
        this.outputGeneratorJson = outputGeneratorJson;
    }
}
 import org.springframework.context.ApplicationContext;
 import org.springframework.context.support.ClassPathXmlApplicationContext;

 public class AppViaSpring {
    public static void main( String[] args )
    {
        ApplicationContext context = 
       new ClassPathXmlApplicationContext(new String[] {"Spring-Common.xml"});

        OutputHelper output = (OutputHelper)context.getBean("OutputHelper");
    output.generateOutput();

    }
}
Spring-Common.xml(main.resources包中的Bean类):

package mian.java;

public interface IOutputGenerator {
    public void generateOutput();
}
package mian.java;

public class CsvOutputGenerator implements IOutputGenerator{
    public void generateOutput(){
        System.out.println("Csv Output Generator");
     }

 }
package mian.java;

public class JsonOutputGenerator implements IOutputGenerator {
    public void generateOutput(){
        System.out.println("Json Output Generator");
    }
}
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

    <bean id="OutputHelper" class="main.java.OutputHelper">
    <property name="outputGeneratorCsv" ref="CsvOutputGenerator" />
    </bean>

    <bean id="CsvOutputGenerator" class="main.java.CsvOutputGenerator" />
    <bean id="JsonOutputGenerator" class="main.java.JsonOutputGenerator" />

</beans>

错误是:

Exception in thread "main"     org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find     class [main.java.OutputHelper] for bean with name 'OutputHelper' defined in     class path resource [Spring-Common.xml]; nested exception is java.lang.ClassNotFoundException: main.java.OutputHelper
at     org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1141)
at     org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:524)
at     org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1177)
at org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:758)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:422)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:93)
at mian.java.AppViaSpring.main(AppViaSpring.java:10)
Caused by: java.lang.ClassNotFoundException: main.java.OutputHelper
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at org.springframework.util.ClassUtils.forName(ClassUtils.java:211)
at org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:385)
at org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1138)
... 9 more
线程“main”org.springframework.beans.factory.CannotLoadBeanClassException中的异常:找不到类路径资源[Spring Common.xml]中定义的名为“OutputHelper”的bean的类[main.java.OutputHelper];嵌套异常为java.lang.ClassNotFoundException:main.java.OutputHelper
位于org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1141)
位于org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.predictBeanType(AbstractAutowireCapableBeanFactory.java:524)
位于org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:1177)
位于org.springframework.beans.factory.support.AbstractBeanFactory.isFactoryBean(AbstractBeanFactory.java:758)
位于org.springframework.beans.factory.support.DefaultListableBeanFactory.PreInstanceSingleton(DefaultListableBeanFactory.java:422)
位于org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
位于org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:139)
位于org.springframework.context.support.ClassPathXmlApplicationContext。(ClassPathXmlApplicationContext.java:93)
main(AppViaSpring.java:10)
原因:java.lang.ClassNotFoundException:main.java.OutputHelper
在java.net.URLClassLoader$1.run(URLClassLoader.java:366)
在java.net.URLClassLoader$1.run(URLClassLoader.java:355)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:354)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:425)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:358)
位于org.springframework.util.ClassUtils.forName(ClassUtils.java:211)
位于org.springframework.beans.factory.support.AbstractBeanDefinition.resolveBeanClass(AbstractBeanDefinition.java:385)
位于org.springframework.beans.factory.support.AbstractBeanFactory.resolveBeanClass(AbstractBeanFactory.java:1138)
... 9更多

您忘记为
OutputHelper
JsonOutputGenerator添加
bean

试试这个:

<bean id="OutputHelper" class="main.java.OutputHelper">
    <property name="outputGeneratorCsv" ref="CsvOutputGenerator" />
    <property name="outputGeneratorJson" ref="JsonOutputGenerator" />
</bean>
这里还有更多信息,为什么要使用构造函数注入:

我们通常建议人们对所有强制协作者使用构造函数注入,对所有其他属性使用setter注入。同样,构造函数注入确保满足所有必需属性,并且不可能实例化处于无效状态的对象(没有通过其协作者)。换句话说,当使用构造函数注入时,您不必使用专用机制来确保设置所需的属性(普通Java机制除外)。


我不确定这是否是一个输入错误,但是类和XML配置中的包不匹配,在类中是mian.java,而在XML中是main.java