我已经发布了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完成此配置?
答案 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);
}
}