在java@configuration类中初始化init方法属性的更好方法

在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() {

我有一个ExternalContext类的依赖项,定义如下依赖项由jar添加,因此不允许修改。

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;
}