Spring - 基于限定符值动态注入

时间:2016-05-24 09:31:14

标签: java spring

在Weld中,我可以执行以下操作以从某些源动态注入配置值:

@Qualifier
@Retention(RetentionPolicy.RUNTIME)
@Target({ TYPE, METHOD, FIELD, PARAMETER })
public static @interface ConfigValue {

    @Nonbinding
    String value();
}

@Produces
@Dependent
@ConfigValue("")
public String stringValue(InjectionPoint ip) {
    ConfigValue configValue = ip.getAnnotated().getAnnotation(ConfigValue.class);
    return myConfigMap.get(configValue.value());
}

但是,等效的Spring会根据@ConfigValue注释的值进行匹配。

我希望Spring调用一个方法来允许我为@ConfigValue注释的所有字段注入自定义值。

我意识到这一点:https://msdn.microsoft.com/en-us/library/system.windows.data.compositecollection(v=vs.110).aspx

然而,对于看似简单的问题,这是一个非常复杂的解决方案。我想知道是否有更简单的解决方案......

1 个答案:

答案 0 :(得分:0)

Spring有InjectionPoint课程。问题是你的@ConfigValue注释不应该有Qualifier注释。然后,您可以使用单个方法生成各种值。

但是,如果您选择在@ConfigValue注释上使用@Qualifier,则必须为@ConfigValue的每个值设置多个生成方法。我似乎没有遇到任何与@Nonbinding相同的东西。

我已经为用户对象测试了这个,而不是String。

PS:另一种方法是让一个"定义"注释和一个非定义的"注射点注释,以满足您的需求。