0

我的许多应用程序属性由数据库提供,我想通过存储库注入它们。我想知道这是否适用于春天。如果有人可以提出解决方案,我会很高兴。我正在考虑的代码看起来像这样:

    @Component
    public class ExampleService implements Service {

        private PlatformSetting setting1;

        @Required
        @Qualifier("setting1")
        public void setSetting1(PlatformSetting setting1) {
            this.setting1 = setting1;
        }

        public String getMessage() {
            return "Hello world!" + setting1.getValue();    
        }

    }


    @Repository
    public class PlatformSettingRepository {


        private HashMap<String, PlatformSetting> settings;
        {
            settings = new HashMap<String, PlatformSetting>();
            settings.put("setting1", new PlatformSetting("bla1"));
            settings.put("setting2", new PlatformSetting("bla2"));

        }

        @Bean
        public PlatformSetting findSetting(@Qualifier String qual) {
            return settings.get(qual);
        }
    }

我知道我可以将 PlatformSettingRepositoy 注入服务中进行查找。但我不想在调用时进行这些查找,我希望 spring 容器在启动时执行它们。

4

3 回答 3

3

PropertyPlaceholderConfigurer 结合 CommonsConfigurationFactory 是您的答案。请看一下这篇文章。

于 2013-05-16T04:45:29.820 回答
1

使用 Spring 表达式语言。

第 1 步:使用 @Bean 公开您的设置 hashmap,让我们说 id="appSettings"

第 2 步:现在您要在其中注入设置 1,只需使用注释:

@Value("#{ appSettings['setting1'] }")
private PlatformSetting setting1;

注意:这适用于普通值,它也应该适用于您的情况。虽然我没试过。如果这不起作用,您可以直接在您的方法中使用表达式解析器,因为您已经在使用 java config 方式来初始化 bean。

于 2013-05-19T14:58:44.090 回答
0

您可以使用InitializingBean

 @Component
 public class Config implements InitializingBean {

    /**
     * Used to hold app properties.
     */
     private Properties properties = new Properties();

     //Getters, setters and filling properties from where you need

     public void afterPropertiesSet() throws Exception {
         //Initialize some static properties of other objects here.
     }
}

而不是将配置注入您的其他类。

于 2013-05-19T09:26:14.820 回答