0

我正在使用 Spring@PropertySource@ConfigurationProperties从文件中读取属性。以下是示例属性:

patterns[0]=\b(test1)\b
patterns[1]=\b(test2)\b

下面是读取这些属性的类:

@Configuration
@PropertySource("classpath:patterns.properties")
@ConfigurationProperties
public class PatternConfig {

    private List<String> patterns;
    //Getters and Setters
}

这会按预期读取属性并设置patterns列表中的值。但是,我真正想做的是,在pattern添加之前对其进行编译,然后将其添加到模式列表中。例如,新列表将是

private List<Pattern> patterns;

所以,我需要覆盖一些会调用Pattern.compile字符串属性并返回Pattern对象的东西,然后将其添加到列表中。可能吗?

4

1 回答 1

0

在此配置中创建一个返回模式列表的方法,使用 @Bean 对其进行注释,并在方法内进行模式编译。

@SpringBootApplication
@EnableConfigurationProperties
@Import(PatternConfig.class)
public class DemoApplication {

  public static void main(String[] args) {
      SpringApplication.run(DemoApplication.class, args);
  }
}


@Configuration
@PropertySource("classpath:patterns.properties")
@ConfigurationProperties
class PatternConfig {


  public void setPatterns(List<String> patterns) {
      this.patterns = patterns;
  }

  private List<String> patterns;

  public List<String> getPatterns() {
      return patterns;
  }

  @Bean
  public List<Pattern> compiledPatterns() {

      List<Pattern> compiledPatterns = new ArrayList<>();
      for (String pattern : patterns) {
        compiledPatterns.add(
                Pattern.compile(pattern));
      }
      return compiledPatterns;
  }

}
于 2017-02-17T11:52:13.577 回答