Spring 开箱即用,但安排起来并不那么直观。
创建您的.properties 文件:
在本例中,我们将在/src/main/resources 中创建一个habitats.properties:
my-habitats={ \
home: {'dog', 'cat', 'goldfish'}, \
farm: {'sheep', 'goat'}, \
zoo: {'lion', 'giraffe'} \
}
创建一个@Configuration 类:
@Configuration
@PropertySource("classpath:/habitats.properties")
public class HabitatConfiguration {
@Bean
public Map<String, List<String>> getHabitatConfig(@Value("#{${my-habitats}}") Map<String, List<String>> habitats) {
return habitats;
}
}
将地图注入@Component类:
@Component
public class HabitatValidator {
private final Map<String, List<String>> habitats;
@Autowired
public HabitatValidator(Map<String, List<String>> habitats) {
this.habitats = habitats;
}
public void validateInput(String habitat, String animal) throws InvalidAnimalHabitatCombinationException {
if (!habitats.get(habitat).contains(animal)) {
throw new InvalidAnimalHabitatCombinationException("You won't find a " + animal + " in a " + habitat);
}
}
}
就是这样:)
让事情变得更安全
为了更安全一点,您可以用枚举替换字符串。只需确保属性文件中的值与枚举条目对齐即可。例如
在不改变habitats.properties文件内容的情况下,添加以下两个枚举:
public enum Habitat {
home, farm, zoo
}
public enum Animal {
dog, cat, goldfish, sheep, goat, lion, giraffe
}
然后把配置类中的bean方法改成:
@Bean
public Map<Habitat, List<Animal>> getHabitatConfig(@Value("#{${my-habitats}}") Map<Habitat, List<Animal>> habitats) {
return habitats;
}
并像这样将其注入到组件中:
private final Map<Habitat, List<Animal>> habitats;
@Autowired
public HabitatValidator(Map<Habitat, List<Animal>> habitats) {
this.habitats = habitats;
}