定义一个配置文件system.properties,里面添加一个name属性值
cat对象的name属性添加了注解@Value("${name}"),spring容器通过运行时的环境变量,获取name的值,赋值给cat的name属性。
@Datapublic class Cat { //名字 @Value("${name}") private String name;}
要想spring容器可以从环境变量中获取到name,我们必须把system.properties里的属性,加载到spring容器的内部的环境变量存储中心(应该是个map对象)。
使用@PropertySource读取外部配置文件中的k/v保存到运行的环境变量中。
@PropertySource(value={"classpath:/system.properties"})@Configurationpublic class PropertyValuesConfig { @Bean public Cat cat(){ return new Cat(); }}
测试运行,下面的代码首先从运行环境中获取到name属性,然后获取Cat对象,打印cat。
@Testpublic void test(){ AnnotationConfigApplicationContext applicationContext = new AnnotationConfigApplicationContext(PropertyValuesConfig.class); //获取运行的环境变量,通过环境变量获取name属性 Environment environment = applicationContext.getEnvironment(); String name = environment.getProperty("name"); System.out.println(name); Cat cat = applicationContext.getBean(Cat.class); System.out.println(cat);}
从运行结果可以看出,运行环境中可以取出name属性,同时name属性值也注入到了cat实例中。