【问题标题】:Java generic warning while using Spring Environment.getProperty() to get a list使用 Spring Environment.getProperty() 获取列表时出现 Java 通用警告
【发布时间】:2013-12-16 19:08:45
【问题描述】:

这可能是一个没有答案的问题,因为 java 泛型警告很难摆脱,但想试一试。 我们正在从 Spring 2.x 迁移到 3.x,因此将 Spring XML 转换为基于 Spring Java 的配置。在此过程中,我们开始使用 Environment 来获取字符串列表。

所以,XML 是这样的:

<bean id="test" class="ClassName">
     <constructor-arg index="0" value ="value1,value2,value3" />
</bean>

现在,spring 显然将构造函数参数转换为 List 并将其传递给构造函数。

但是,现在我们使用的是基于 Java 的环境配置。

@SuppressWarnings("unchecked")
@Bean
public ClassName getBean() {
    List<String> strings = env.getProperty("prop.values", List.class);
    return new ClassName(strings);
}

现在显然我必须将 @SuppressWarnings("unchecked") 放在方法上,因为此行会生成警告...

List<String> strings = env.getProperty("prop.values", List.class);

由于我们在构建 bean 时在许多地方注入了列表,因此人们对此抱怨不已并且不愿意使用基于 Java 的配置。

可能没有办法抑制这个警告,如果没有,有没有更好的方法在 Spring 中做到这一点,不会产生这样的警告?谢谢。

【问题讨论】:

  • 可以使用 Spring 的 Java 配置,不代表必须使用。
  • 你能举一个ClassName构造函数和prop.values属性值的例子吗?
  • @SotiriosDelimanolis 我明白你的意思。如果没有更好的方法,我们可能会将一些 xml 与 java configs 混合使用。只是想在我们排除之前确定一下。举个例子,想象一下任何一个简单的类,它把 List 作为构造函数中的一个参数。没什么大不了的。
  • 您可以通过拆分env.getProperty("prop.values")返回的String并将数组元素添加到List来自己创建List
  • 嗯,这就是重点,它的样板材料,我认为 spring 足够聪明,可以提供这样的东西。从 Xml 迁移到 Java 配置的人不喜欢这样。

标签: java spring environment-variables


【解决方案1】:

您为什么要手动从Environment 中提取内容? Spring是一个依赖注入框架;环境值也可以注入!

试试这个:

@Configuration
public class MyConfiguration {

    @Value("${prop.values}")
    private List<String> strings;

    @Bean
    public ClassName test() {
        return new ClassName(strings);
    }
}

或者,更好的是,只使用组件扫描。这样一来,您就可以完全取消 @Bean 方法,并将更多繁重的工作留给 Spring。

@Component("test")
public ClassName {

    private List<String> strings;

    public ClassName(@Value("${prop.values}") List<String> strings) {
        this.strings = strings;
    }

}

@Component
public class MyClassThatUsesClassNameBean {

    @Autowired
    private ClassName test;
}

【讨论】:

    猜你喜欢
    • 2022-12-09
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2021-12-15
    • 2015-12-30
    • 1970-01-01
    • 2017-09-20
    • 2020-03-16
    相关资源
    最近更新 更多