我无法为@service设置构造函数。在我的代码中许多地方都使用“url”和“template”,并且只想在一个地方初始化它。下面是代码,弹簧构造函数问题
@Service
public class RabbitMQServices {
@Autowired
public RabbitMQServices() {
// Create RabbitMQ management url
this.url = "http://" + rmqfqdn + ":" + rmqmgmtport;
// Create http template
line 36 ==> this.template.getInterceptors()
.add(new BasicAuthorizationInterceptor(rmqadminname,
rmqadminpw));
}
// Create vhost
private String createVhost(RabbitmqRepository repo) {
// Create default parameters
result = "OK";
// Create service uri
String uri = url + "/api/vhosts/" + repo.getTenantid() + "-vh";
// Create header entity
HttpHeaders header = new HttpHeaders();
header.set("content-type", "application/json");
HttpEntity<String> entity = new HttpEntity<String>(header);
try {
// Go create vhost
template.exchange(uri, HttpMethod.PUT, entity, String.class);
} catch(Exception e) {
result = "FAIL: " + e;
}
return result;
}
// Class variables
String result;
String tenantpw;
String url;
RestTemplate template;
// RabbitMQ Server URI
@Value("${rabbitmq.server.fqdn}")
private String rmqfqdn;
// RabbitMQ Server Managment port
@Value("${rabbitmq.server.management.port}")
private String rmqmgmtport;
// RabbitMQ Server administrator name
@Value("${rabbitmq.server.adminname}")
private String rmqadminname;
// RabbitMQ Server administrator password
@Value("${rabbitmq.server.adminpw}")
private String rmqadminpw;
我收到以下错误,
Caused by: java.lang.NullPointerException: null
at com.belcan.services.RabbitMQServices.<init>(RabbitMQServices.java:36) ~[bin/:na]
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.8.0_101]
at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.8.0_101]
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) ~[na:1.8.0_101]
at java.lang.reflect.Constructor.newInstance(Unknown Source) ~[na:1.8.0_101]
at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:142) ~[spring-beans-4.3.5.RELEASE.jar:4.3.5.RELEASE]
... 38 common frames omitted
36号线在构造函数中this.template线,
this.template.getInterceptors() ...
这与Spring无关。这只是一个很好的旧NPE。你不能在一个你尚未初始化的变量上调用一个方法。 –
除非它是一个静态方法! –
尝试静态但仍NPE错误。 – skmansfield