使用@Value注解对bean进行属性注入
使用@Value注解,可以有三种属性注入的方式:
1. 使用字面量注入
2. 使用EL表达式注入
3. 使用占位符注入
import org.springframework.beans.factory.annotation.Value; public class Bottle { //使用字面量注入属性 @Value(value = "red") private String color; //使用el表达式注入属性 @Value(value = "#{30 / 3.14}") private double diameter; //使用占位符注入属性,需要在容器中引入配置文件 @Value(value = "${bottle.source}") private String source; …… }
如果在占位符中引入配置文件中的值,必须在容器中声明配置文件的位置,可以使用@PropertySource注解
/** * 配置类,使用@Value注解进行属性注入 * 引入配置文件 */ @Configuration @PropertySource(value = {"classpath:/config.properties"}) public class BeanConfig { //使用无参构造器注册Bottle @Bean(value = "bottle") @Scope("singleton") public Bottle bottle() { return new Bottle(); } }
这样,从容器中获取的bean对象就会被注入color、diameter、source属性。
@Test public void test() { //创建容器 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ValueBeanConfig.class); //从容器中获取Bottle实例 Bottle bottle = (Bottle) applicationContext.getBean("bottle"); //控制台输出 System.out.println(bottle.toString()); //关闭容器 ((AnnotationConfigApplicationContext)applicationContext).registerShutdownHook(); }
测试结果:
Bottle{color='red', diameter=9.554140127388534, source='laboratory'}
如果容器中声明了配置文件的位置,还可以使用环境变量获取其中的值
bottle.source=laboratory bottle.size=1599 bottle.nickname=frankie
//创建容器 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(ValueBeanConfig.class); //从容器中获取环境变量 Environment environment = applicationContext.getEnvironment(); String source = environment.getProperty("bottle.source");