我想使用RestTemplate
在类的构造函数中创建RestTemplateBuilder
的实例。我想在构造函数中自动装配RestTemplateBuilder
并“手动”传递另一个参数。这可能吗?
到目前为止我的方法:
public class IlikeU {
private final String blub;
private final RestTemplate restTemplate;
public IlikeU(final String blub, @Autowired final RestTemplateBuilder restTemplateBuilder) {
this.blub = blub;
this.restTemplate = restTemplateBuilder.build();
}
}
我想创建一个如下实例,但无法完成,因为构造函数需要2个参数。
IlikeU iLikeU = new IlikeU("pew pew");
答案 0 :(得分:2)
它不是那样工作的-您可以将对象创建传递给Spring,也可以自己处理。 Spring不是可以为您提供不同接口的预处理器-它会使用您的接口自动处理它。
您可以做的是还向Spring上下文提供bluc
值并将其完全自动化:
public IlikeU(@Value("${your.parameter}") final String blub, @Autowired final RestTemplateBuilder restTemplateBuilder)
您需要在上下文可用的属性中将值定义为键your.parameter
。
其他可能性是建立一个工厂,该工厂将从Spring获得一个rest模板构建器,并使用给定的字符串构建您的IlikeU
类:
public class IlikeUFactory {
private final RestTemplate restTemplate;
public IlikeUFactory(@Autowired final RestTemplateBuilder restTemplateBuilder) {
this.restTemplate = restTemplateBuilder.build();
}
public IlikeU createIlikeU(String blub) {
return new IlikeU(blub, this.restTemplate);
}
}
答案 1 :(得分:1)
您不能完全那样做。像下面的代码中那样,另一种方式呢?
@Component
public class IUseU{
@Autowired
private RestTemplateBuilder restTemplateBuilder;
public void use(){
IlikeU iLikeU = new IlikeU("pew pew", restTemplateBuilder);
}
}
public class IlikeU {
private final String blub;
private final RestTemplate restTemplate;
public IlikeU(final String blub, final RestTemplateBuilder restTemplateBuilder) {
this.blub = blub;
this.restTemplate = restTemplateBuilder.build();
}
}
侧面说明:spring框架的优点是依赖项注入。 因此,如果您使用的是Spring,则不应在您的计算机中使用
new XXXX()
代码并让spring框架为您处理这一部分。这样做,您将获得松散耦合的优势。您可以更换 以后再上另一堂课。否则,从长远来看,你会发现自己 替换任何类都非常困难。
答案 2 :(得分:0)
除了FranXho的答案外,您还可以使用@Required 如果您不想失去构造函数依赖性的优势,请使用自动装配。