在构造函数中不使用Properties
,我看到@Value
注解应该可以做到这一点。
它在我的另一个实现中工作,但在这里它不工作
控制器:
@Autowired
private Customer customer;
字符串
我的班级
@Service
public class Customer {
/** The soap GW endpoint. */
@Value("${soapGWEndpoint}")
private String soapGWEndpoint;
/** The soap GW app name. */
@Value("${soapGWApplName}")
private String soapGWAppName;
/** The soap GW user. */
@Value("${generic.user}")
private String soapGWUser;
/** The soap GW password. */
@Value("${generic.user.password}")
private String soapGWPassword;
public Customer () {
// All parameters are null:
login(soapGWEndpoint, soapGWAppName, soapGWUser, soapGWPassword);
}
}
型
但它们在application.properties文件中。
为什么在这种情况下我不能使用@Value?
4条答案
按热度按时间wlp8pajw1#
Spring不会注入preoperties的值,直到对象完全示例化(Spring要做的第一件事是调用构造函数,因为这是创建新对象的默认方式)。你应该在@PostConstruct方法中调用login(),这样Spring在初始化对象后自动调用它:
字符串
3gtaxfhh2#
另一种选择是像这样使用构造函数注入
字符串
fzsnzjdm3#
你可以在对象初始化后使用
@PostConstruct
。请看一下我之前写的示例代码:字符串
调用
loadCredentialsAndDomainURL()`` and
loadClientsAPI()methods, the object is ready and can read the property values from the
application.properties ``文件时。xn1cxnb44#
问题是对象一初始化就抛出空指针异常