代码之家  ›  专栏  ›  技术社区  ›  Josh M.

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

  •  0
  • Josh M.  · 技术社区  · 8 年前

    我已经发布了 a similar question 但是我需要用一个例子来详细说明,以得到一个有用的答案。

    我不确定,使用SpringBoot,如何定义Spring应该用来注入的类的特定实例 @Autowire 依赖字段/构造函数。

    假设我有一个实用程序类,它在一个库中,我要么a)不能访问变更,要么b)不想添加对Spring引导的依赖。

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

    public class SecurityUtil {
        private final String algorithm;
        private final String key;
    
        public SecurityUtil(String algorithm, String key) {
            // ...
        }
    }
    

    密码帮助器 --用途 SecurityUtil 签署密码(例如)。

    public class PasswordHelper {
        private final SecurityUtil securityUtil;
    
        @Autowired
        public PasswordHelper(SecurityUtil securityUtil) {
            // ...
        }
    }
    

    在应用程序启动期间,我希望能够创建 证券化 使用我的应用程序配置(或其他地方)中定义的算法和密钥。我假设我可以添加一个与下面类似的类,但是我不知道如何配置我的单例注入。

    双config --为DI(E.

    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引导完成此配置?

    2 回复  |  直到 8 年前
        1
  •  1
  •   Patrick    8 年前

    你可以走这条路:

    @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);
        }
    }
    
        2
  •  2
  •   grape_mao    8 年前

    更换 configure 方法:

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