问题与原因
类变量(用static修饰)是属于类的,在spring容器中都是实例化对象。当我们使用静态变量或静态方法时,不需要new出来一个类的实例化对象,所以使用@Autowired修饰一个静态变量时,该静态变量并没有真正实例化成一个对象,因此该静态变量为null,不能使用 @Autowired来注入静态变量。
解决方法
@Component
public class RestTemplateUtils {
private static RestTemplate restTemplate;
public static RestTemplate getRestTemplate() {
return restTemplate;
}
//注入set方法,实现static与Autowired同时满足
@Autowired
public void setRestTemplate(RestTemplate restTemplate) {
RestTemplateUtils.restTemplate = restTemplate;
}
/**
* 发送post请求
*/
public static String sendPost(String url, Object dto) {
String responseStr = getRestTemplate().postForObject(url, dto, String.class);
return responseStr;
}
}