在java@configuration类中初始化init方法属性的更好方法
我有一个ExternalContext类的依赖项,定义如下依赖项由jar添加,因此不允许修改。在java@configuration类中初始化init方法属性的更好方法,java,spring,spring-boot,Java,Spring,Spring Boot,我有一个ExternalContext类的依赖项,定义如下依赖项由jar添加,因此不允许修改。 public class ExternalContext { private String emailUsername; private String emailPassword; // setters & getters private InitialContext initialContext; public void init() {
public class ExternalContext {
private String emailUsername;
private String emailPassword;
// setters & getters
private InitialContext initialContext;
public void init() {
Hashtable<String, String> props = new Hashtable<String, String>();
if (!(emailUsername == null)) {
props.put("SEC_PRINCIPAL", emailUsername);
}
if (emailPassword != null) {
props.put("SEC_CREDENTIALS", emailPassword);
}
initialContext = new InitialContext(props);
}
}
我已经创建了emailPassword的bean,以便在调用ExternalContext类的init方法时,该值可用
在这种情况下,有没有更好的初始化属性的方法?
有没有其他不需要创建emailPassword bean的方法?
我使用的是spring boot 2.1.15。只需释放,创建一个对象,填充字段并调用
init()
:
ExternalContext
代码段不显示emailUsername
和emailPassword
字段的填充方式。是否有可用的构造函数,或者它是否显式搜索名为emailUsername
和emailPassword
的两个字符串bean?@Michiel Setters/getter用于设置字段
@Configuration
public class AppConfig {
@Value("${email.username}")
private String emailUsername;
@Value("${email.password}")
private String password;
private final PasswordDecryptor passwordDecryptor;
public AppConfig(PasswordDecryptor passwordDecryptor) {
this.passwordDecryptor = passwordDecryptor;
}
@Bean
public String emailPassword(){
return passwordDecryptor.decrypt(password);
}
@Bean(initMethod = "init" )
public ExternalContext externalContext(){
return new ExternalContext();
}
}
@Bean
public ExternalContext externalContext() {
ExternalContext ctx = new ExternalContext();
ctx.setEmailUsername(emailUsername);
ctx.setEmailPassword(passwordDecryptor.decrypt(password));
ctx.init();
return ctx;
}