当前位置: 首页 > 知识库问答 >
问题:

仅通过@Value注入属性映射

白哲茂
2023-03-14

如何使用@values注释填充值映射,而不在applicationContext中定义任何内容。xml或任何其他xml文件。

我使用的是SpringBoot,它没有任何XML文件,也不需要任何XML文件,所以请不要告诉我用XML等声明任何属性读取器bean。

此外,这是一个属性注入问题-请不要建议使用数据库存储数据-这不是一个答案,对于我的情况也不可能。

此外,我也不能使用YAML(由于部署/操作需求)。

我已尝试声明此注射:

@Value("${myprop}")
Map<Integer, String> map;

还有这个

@Value("${myprop.*}")
Map<Integer, String> map;

使用这些条目应用程序。属性

myprop.1=One
myprop.2=Two
myprop.3=Three

然后又试图

myprop[1]=One
myprop[2]=Two
myprop[3]=Three

但是没有什么好处——只是爆炸了

无法自动连线字段:...无法解析占位符myprop

我发现了一个使用注入的String[]的变通方法,指定为key1:value1,key2:value2 然后我在代码中解析,但我不想这样做,因为a)代码更多,b)列表会很长,一行上的所有对都很难读取和维护。

有没有办法从几个属性自动构建地图?

我不在乎属性名是什么,字段类型或注释是什么;我只是尝试为每个属性注入一个键/值对。


共有2个答案

司寇书
2023-03-14

在Java配置中为此定义一个bean怎么样?

@Bean
public Map<Integer, String> myProps(Properties properties) {
  Map<Integer, String> map = new HashMap<>();

  // implement logic to populate map from properties

  return map;
}

在你的课堂上:

@Autowirded
Map<Integer, String> map;
汝承载
2023-03-14

不确定这是否完全适用于您的场景(您有一个Map

  • 假设一个@配置类,其中。属性文件作为java加载。util。属性对象:
@Configuration
public class Config {

    @Bean(name = "mapper")
    public PropertiesFactoryBean mapper() {
        PropertiesFactoryBean bean = new PropertiesFactoryBean();
        bean.setLocation(new ClassPathResource("META-INF/spring/application.properties"));
        return bean;
    }

    @Bean
    public MyBean myBean() {
        return new MyBean();
    }
}
  • MyBean类,其中使用了这些Properties,使用SPeL注入:
public class MyBean {

    @Value("#{mapper}")
    private Map props;

    public Map getProps() {
        return props;
    }
}

所以,最后你不使用xml(当然),你需要使用一个Properties tiesFactoryBean来加载。属性文件,使用@Value,Spring将把Properties注入到Map中。额外的代码(可能与@Properties tySource相比)是Properties tiesFactoryBean,您不需要手动解析代码中的值(与注入String[]的变通方法相比)。

希望这能有所帮助。

 类似资料:
  • 我在@Configuration类中有以下内容 我想检索所有属性作为一个java.util.属性对象或筛选它的前缀使用@Value属性的子集。 我使用的是纯java配置,我只需要以某种方式获取由@Properties tySource配置的属性。Spring环境一次只能获取一个属性。 简而言之,我真正想要的是所有以hibernate为前缀的属性*

  • 我是Spring Security的新手。我看过很多关于如何通过外部属性文件的注释注入值的文章。我尝试了很多方法,但最终都是用java。lang.IllegalArgumentException:无法解析占位符“val.id”异常。 你能给我一些提示如何处理这个例外吗? 我的java类如下所示: 我的属性文件名为val.properties,位于WEB-INF下,其内容为val.id=xyz 我将

  • 问题内容: 从属性文件中为最终属性进行Spring注入的一个简单问题。 我有一个属性文件,要在其中存储文件路径。通常,当我使用属性文件时,我会使用类似以下的方法来设置类属性: 然后在我spring.xml我会像这样: 这很好用,很简单,并且使代码简洁美观。但是我不确定在尝试将属性值注入最终类属性时使用的最整洁的模式是什么? 显然是这样的: 不管用。还有另一种方法吗? 问题答案: 将值注入最终字段的

  • 问题内容: 关于从属性文件中为最终属性进行Spring注入的一个简单问题。 我有一个属性文件,要在其中存储文件路径。通常,当我使用属性文件时,我会使用类似以下的方法来设置类属性: 然后在我spring.xml我会像这样: 这样效果很好,很简单,并且使代码更简洁。但是我不确定在尝试将属性值注入最终类属性时使用的最整洁的模式是什么? 显然是这样的: 不管用。还有另一种方法吗? 问题答案: 如果您正在寻

  • 我们一直在使用Spring@Value注释来注入属性值。我们有一个约定来命名属性名称,以匹配它们注入的java字段。这带来了不必要的工作,即每个ConfigBean的java字段都需要用@Value注释。 我正在寻找一种方法,用新的注释注释java类(比如说ConfigBean),让一些后处理器读取这些bean的属性名称,并自动注入属性值。 我正在寻找一些关于如何在没有@Value注释的情况下实现

  • 问题内容: 使用诸如 可以分配具有某些属性的某些字段。 是否有更短,更简洁的形式来执行此操作? 问题答案: