Java 调用具有自动关联值的方法

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

我有一个方法,在这里我向这个方法的一个参数注入一个值。我如何调用checkHealth而不传入一个将覆盖所注入的值的参数

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
:)