Java 调用具有自动关联值的方法
我有一个方法,在这里我向这个方法的一个参数注入一个值。我如何调用checkHealth而不传入一个将覆盖所注入的值的参数Java 调用具有自动关联值的方法,java,spring,spring-boot,Java,Spring,Spring Boot,我有一个方法,在这里我向这个方法的一个参数注入一个值。我如何调用checkHealth而不传入一个将覆盖所注入的值的参数 private Health checkHealth(@Qualifier("myRestTemplate") RestTemplate restTemplate) { } @Bean(name = "myRestTemplate") public RestTemplate myRestTemplate() { RestTemplateBuilder builde
private Health checkHealth(@Qualifier("myRestTemplate") RestTemplate restTemplate) {
}
@Bean(name = "myRestTemplate")
public RestTemplate myRestTemplate() {
RestTemplateBuilder builder = new RestTemplateBuilder();
return builder
.rootUri(uri)
.basicAuthentication("", "")
.build();
}
你不能!请注意,Spring的注释在其Spring上下文中工作,而不是在您手动尝试执行某些操作时工作。这意味着,当且仅当Spring调用方法
checkHealth()
时,注入才会有效地发生,而当您调用此方法时则不会。
在您的情况下,不需要传入参数。只需在checkHealth()内调用myrestemplate()
,如下所示:
private Health checkHealth() {
final RestTemplate template = myRestTemplate();
...
}
要使您的场景正常工作,请将myrestemplate
作为字段插入:
@Service
public class HealthServiceImpl implements HealthService {
@Autowired
@Qualifier("myRestTemplate")
private RestTemplate restTemplate;
private Health checkHealth() {
// do something with restTemplate
}
}
否则,请检查@Prashant关于为什么将其作为方法参数注入不起作用的答案。我最后做了以下工作-
private RestTemplate restTemplate;
private Health checkHealth() {
ResponseEntity<String> response
= this.restTemplate.getForEntity(resourceUrl, String.class);
}
@Postconstruct
public RestTemplate myRestTemplate() {
RestTemplateBuilder builder = new RestTemplateBuilder();
return builder
.rootUri(uri)
.basicAuthentication("", "")
.build();
}
私有RestTemplate RestTemplate;
私人健康检查健康(){
反应性反应
=this.restTemplate.getForEntity(resourceUrl,String.class);
}
@施工后
公共RestTemplate myRestTemplate(){
RestTemplateBuilder=新的RestTemplateBuilder();
返回生成器
.rootUri(uri)
.basicAuthentication(“,”)
.build();
}
您正在查找检查健康状况(myRestTemplate())
?如果没有,您能否为问题添加更多详细信息?新代码应尽可能使用构造函数注入。如果我在字段级别自动关联该值,则checkHealth方法中resttemplate的值为null。谢谢@Prashant。在我的例子中,我不希望每次调用checkhealth方法时都创建一个新的RestTemplate对象。我试图在beans的帮助下使用Spring的单例实现——看来在这种情况下我必须自己做。不客气。但是,您可以使用名为Lombok pg
的扩展Lombok
来创建一个具有恰当命名注释的单例类-@Singleton
:)