Java 基于工厂类的类不可用于自动布线

Java 基于工厂类的类不可用于自动布线,java,spring,Java,Spring,我试图学习Spring的基础知识,并定义了这个类 public class Processor { public Processor() { this.setup(); } private void setup(){ //run some setup code } public String processString(String str) { // process the string

我试图学习Spring的基础知识,并定义了这个类

public class Processor {

    public Processor() {
        this.setup();
    }

    private void setup(){
       //run some setup code
    }

    public String processString(String str) {
        // process the string
        return str;
    }

}
我想通过Spring启用这个类,所以我使用了一个工厂bean:

阅读我使用:

这正如预期的那样有效

当我尝试使用

@Autowired
private Processor processor;
在项目的其他地方,我收到编译时错误:

Could not autowire. No beans of 'Processor' type found.

我没有正确设置工厂吗?我应该注释Processor对象,以指示它将自动连接?也许这不是工厂的有效用例?

一般来说,工厂bean已经非常过时了,第一个spring版本确实使用了这种方法,但是spring从那时起就已经发展了

工厂bean本身应该在spring配置中注册(spring的最早版本使用基于xml的配置,因为当时不存在Java注释),因此教程包含xml配置示例。无论如何,这可能就是失败的原因。在测试中,您还应该指定xml配置的路径,否则工厂bean将不会被加载

您可以使用这些工厂bean(它们仍然受支持),但它们有以下缺点:

  • 它们将您的代码耦合到spring框架
  • 很多样板文件(通常在典型的应用程序中可能有数百个Bean,因此为每个Bean创建一个工厂Bean是一件过分的事情)
  • 因此,您可以:

  • 不要使用工厂bean,而是使用
    @Component
    注释(或更专业的
    @Service
    )注释处理器

  • 或者使用Java配置:


  • 一般来说,工厂bean已经非常过时了,第一个spring版本确实使用了这种方法,但是spring从那时起就已经进化了

    工厂bean本身应该在spring配置中注册(spring的最早版本使用基于xml的配置,因为当时不存在Java注释),因此教程包含xml配置示例。无论如何,这可能就是失败的原因。在测试中,您还应该指定xml配置的路径,否则工厂bean将不会被加载

    您可以使用这些工厂bean(它们仍然受支持),但它们有以下缺点:

  • 它们将您的代码耦合到spring框架
  • 很多样板文件(通常在典型的应用程序中可能有数百个Bean,因此为每个Bean创建一个工厂Bean是一件过分的事情)
  • 因此,您可以:

  • 不要使用工厂bean,而是使用
    @Component
    注释(或更专业的
    @Service
    )注释处理器

  • 或者使用Java配置:


  • 请尝试将“public Class getObjectType()”中的泛型类型更改为Processor,而不是Processor?请尝试将“public Class getObjectType()”中的泛型类型更改为Processor,而不是Processor?使用@Bean将确保仅创建该类的一个实例?在这两种情况下(@Component和@Bean方法)只有一个bean——它是一个默认范围(在spring中称为singleton)。与此相反,您可以将其配置为范围原型,以便在需要时创建新实例):
    @scope(value=ConfigurableBeanFactory.scope\u prototype)
    (请参阅)组件似乎就足够了。我不确定为什么要对Bean使用配置并创建一个新的MyConfig类。只需使用组件注释处理器,该类将自动连接。使用组件可接受而不是配置Bean吗?是的,这是两种不同的方式,两者都可以工作-查看其中一种方式,而不是两种方式<代码>@组件从spring 2.5开始提供
    @配置
    从spring 3.0开始提供。一般来说,Java配置方法可以更灵活,但它的内容非常高级,主要与编写基于spring的库以供通用有关。对于简单的应用程序/学习,@Component方法就可以了。使用@Bean将确保只创建这个类的一个实例?在这两种情况下(@Component和@Bean方法),只有一个Bean-它是一个默认范围(在spring中称为singleton)。与此相反,您可以将其配置为范围原型,以便在需要时创建新实例):
    @scope(value=ConfigurableBeanFactory.scope\u prototype)
    (请参阅)组件似乎就足够了。我不确定为什么要对Bean使用配置并创建一个新的MyConfig类。只需使用组件注释处理器,该类将自动连接。使用组件可接受而不是配置Bean吗?是的,这是两种不同的方式,两者都可以工作-查看其中一种方式,而不是两种方式<代码>@组件从spring 2.5开始提供
    @配置
    从spring 3.0开始提供。一般来说,Java配置方法可以更灵活,但它的内容非常高级,主要与编写基于spring的库以供通用有关。对于简单的应用程序/学习,@Component方法就可以了。
    @Autowired
    private Processor processor;
    
    Could not autowire. No beans of 'Processor' type found.
    
    
    @Configration
    public class MyConfig {
      
      @Bean
      public Processor processor() {
          // optionally slightly customize the creation of the class if required;
          return new Processor();
      }
    }