使用“代码”配置自动有线服务注入

时间:2018-07-17 13:55:28

标签: java spring spring-boot dependency-injection configuration

我已经发布了a similar question,但是我需要详细举例说明以获得有用的答案。

我不确定使用Spring Boot如何定义类的特定实例,Spring应该使用该类实例将其注入到@Autowire d个依赖字段/构造函数中。

假设我在库中有一个实用程序类,我要么a)不能访问更改,要么b)不想在Spring Boot上添加依赖项。

SecurityUtil -接受两个字符串参数,这些参数可能来自某些应用程序级配置(在外部程序包中定义)。

public class SecurityUtil {
    private final String algorithm;
    private final String key;

    public SecurityUtil(String algorithm, String key) {
        // ...
    }
}

PasswordHelper -使用SecurityUtil签名密码(例如)。

public class PasswordHelper {
    private final SecurityUtil securityUtil;

    @Autowired
    public PasswordHelper(SecurityUtil securityUtil) {
        // ...
    }
}

在应用程序启动期间,我希望能够使用在应用程序配置(或其他地方)中定义的算法和密钥来创建SecurityUtil的单例实例。我以为我可以添加与下面的类类似的类,但是我不确定如何配置单例的注入。

DIConfig -配置用于DI的内容(例如

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

@Configuration
public class DIConfig
{
    @Value("${security-util.key}")
    private String securityUtilKey;

    @Value("${security-util.algorithm}")
    private String securityUtilAlgorithm;

    public void configure(SpringDiMagicalConfig config)
    {
        // register a singleton SecurityUtil instance
        config.register(new SecurityUtil(securityUtilKey, securityUtilAlgorithm));
    }
}

如何使用Java / Spring Boot完成此配置?

2 个答案:

答案 0 :(得分:2)

configure方法替换为:

@Bean
public SecurityUtil securityUtil()
{
    return new SecurityUtil(securityUtilKey, securityUtilAlgorithm);
}

答案 1 :(得分:1)

您可以这样:

@Component
public class DiConfig {

    @Bean
    public SecurityUtil securityUtil(
            @Value("${security-util.key}") String securityUtilKey,
            @Value("${security-util.algorithm}") String securityUtilAlgorithm) {
        return new SecurityUtil(securityUtilKey, securityUtilAlgorithm);
    }
}