java - 将动态值注入(inject) bean 的 constructor-arg 标记

标签 java spring autowired

我有一个 3d 派对库,它将密码作为定义为 Spring bean 的类的构造函数参数。

<bean class="com.thirdparty.CoolClass" id="coolClassId">
   <constructor-arg index="1" value="clearTextPassword" />
</bean>

但我有一个问题……安全策略禁止我使用明文密码。所以我可以设置另一个接受加密密码并对其进行解密的 bean。

@Component("decryptor") 
public class DecryptorService {

  public String decrypt(String encryptedString) { 
   ///
  }
}

是否可以通过将加密属性传递给此 DecryptorService 来提升我的 XML,以便构造函数参数获取其值?

最佳答案

假设您对您这边的代码具有写入权限。 使用如下所示的 @Bean 方法创建一个 @Configuration

@Configuration
class ApplicationConfig {
    @Autowired DecryptorService decryptorService;
    @Autowired Properties props;

    @Bean
    public String clearTextPassword() {
        decryptorService.decrypt(props.getEncryptedPassword());
    }
}

然后更改您的 bean 定义以使用 ref

<bean class="com.thirdparty.CoolClass" id="coolClassId">
   <constructor-arg index="1" ref="clearTextPassword" />
</bean>

关于java - 将动态值注入(inject) bean 的 constructor-arg 标记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49142975/

相关文章:

java - 构建树中的 spring-security-core 版本冲突问题

java - GWT:片段和模块

java - 使用 Spring Boot 和 Spring Batch 读取 .csv 文件并将其存储在数据库中

java - 为 Spring MVC 和 Maven WebApplication 创建文件/图像文件夹目录

java - Spring启动异步 Controller

java - 支持在非 spring 实例化的类中 Autowiring (3)

java - 断言失败甚至 java.lang.AssertionError : expected [true] but found [false]

java - 带有子类的步骤构建器

java - Spring将 Autowiring 的对象传递给类构造函数

java - 无法使用作业范围 Autowiring Bean