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

标签 java spring spring-boot

我有一个 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);
    }
}

我需要创建上述类的 bean 并通过调用它的 init 方法来初始化属性。这就是我想要做的事情

@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();
    }
}

我已经创建了 emailPassword bean,以便在调用 ExternalContext 类的 init 方法时可以使用该值。

在这种情况下是否有更好的初始化属性的方法?

在我不需要创建 emailPassword bean 的地方有什么替代方法吗?

我正在使用 spring boot 2.1.15.RELEASE

最佳答案

很简单,创建一个对象,填充字段并调用init():

@Bean
public ExternalContext externalContext() {
    ExternalContext ctx = new ExternalContext();
    ctx.setEmailUsername(emailUsername);
    ctx.setEmailPassword(passwordDecryptor.decrypt(password));
    ctx.init();
    return ctx;
}

关于java - 在 java @configuration 类中初始化 init 方法属性的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62357788/

相关文章:

java - 如何在 Spring 中使用 map 列表执行批量更新?

java - AutoConfigureTestDatabase 已弃用

java - 如何修复 spring-boot 中的 CORS Cross Origin 错误?

java - 为什么新线程在事务性 Spring JUnit 测试中看不到主线程准备的测试数据?

java - Eclipse 将行标记为死代码

java - 静态与。 Java中的动态绑定(bind)

java - 透明 JDesktopPane

java - 使用 spring 在属性文件中设置值

java - 基于 Java 的 Web 应用程序的文件存储

java - 使用 enctype ="multipart/form-data"时请求 getParameter 始终为 null