我刚开始学习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,原始代码将如何工作
1条答案
按热度按时间63lcw9qa1#
Spring将创建bean defaultResultBuilder和htmlResultBuilder,您需要将它们注入ResultBuilderFactory。
Lombok注解@RequiredArgsConstructor执行构造函数注入。
或者你可以使用场注入,但是它们不能是最终场。
但是如果可能的话,你应该选择构造器或者注入器。