Spring bean定义和注入

nhhxz33t  于 2022-12-17  发布在  Spring
关注(0)|答案(1)|浏览(154)

我刚开始学习Spring。我看了下面的一些代码。但是我不明白ResultBuilderFactory是如何返回正确的类的。有人能解释一下吗?谢谢!

public interface ResultBuilder{
  public void print();
}
@Component
public class DefaultResultBuilder implement ResultBuilder{
  public void print(){System.out.printlin("DefaultResultBuilder"};
}
@Component
public class HtmlResultBuilder implement ResultBuilder{
  public void print(){System.out.printlin("HtmlResultBuilder"};
}
@Component
public class ResultBuilderFactory{
 private final ResultBuilder defaultResultBuilder;
 private final ResultBuilder htmlResultBuilder;

public ResultBuilder get(String name){
  if(name.equal("HTML") return htmlResultBuilder;
  return defaultResultBuilder;
}

更新日期:
只是更新组件注解的错别字。我的错...我尝试了代码,并得到错误:“ResultBuilderFactory需要一个Bean,但找到了两个....请考虑将其中一个Bean标记为@Primary...或使用@ Qualifier...”如果不使用Primary或@Qualifier,原始代码将如何工作

63lcw9qa

63lcw9qa1#

Spring将创建bean defaultResultBuilder和htmlResultBuilder,您需要将它们注入ResultBuilderFactory。
Lombok注解@RequiredArgsConstructor执行构造函数注入。

@Component
@RequiredArgsConstructor
public class ResultBuilderFactory{
    private final ResultBuilder defaultResultBuilder;
    private final ResultBuilder htmlResultBuilder;
}

或者你可以使用场注入,但是它们不能是最终场。

@Component
public class ResultBuilderFactory{

    @Autowired
    private  ResultBuilder defaultResultBuilder;

    @Autowired
    private  ResultBuilder htmlResultBuilder;
}

但是如果可能的话,你应该选择构造器或者注入器。

相关问题