Spring源码解析之属性赋值
在Spring注解中对属性赋值有3种⽅法:
基本数值,可以是基本数据类型,字符串等; @Value("feiyue")
SpEL表达式,使⽤#{}进⾏表达式运算 @Value("#{30 - 5}")
使⽤ ${}获取.properties配置⽂件中的key对应的value值,配置⽂件中的值默认都加载到运⾏时环境Environment中,所有也可以通过Property("prop.city");⽅式获取。
PropertyValue类
import org.springframework.beans.factory.annotation.Value;
/**
*属性赋值有⼏种⽅法
* 1.基本数值 @Value("feiyue")
* 2.SpEL表达式 @Value("#{30 - 5}")
* 3.使⽤ ${}获取属性⽂件中的值,配置⽂件中的值默认都加载到运⾏时env环境中
*/
public class PropertyValue {
@Value("feiyue")
private String name;
@Value("#{30 - 5}")
private int age;
@Value("${prop.city}")
private String city;
public String getName(){
return name;
spring ioc注解
}
public void setName(String name){
this.name = name;
}
public int getAge(){
return age;
}
public void setAge(int age){
this.age = age;
}
public String getCity(){
return city;
}
public void setCity(String city){
this.city = city;
}
@Override
public String toString(){
return"PropertyValue{"+
"name='"+ name +'\''+
", age="+ age +
", city='"+ city +'\''+
'}';
}
}
PropertyConfig配置⽂件,加载属性⽂件和创建Bean @PropertySource(value = {"classpath:config.properties"})
或
@PropertySources({ @PropertySource(value = {"classpath:config.properties"}) })
import ity.PropertyValue;
import t.annotation.Bean;
import t.annotation.Configuration;
import t.annotation.PropertySource;
/**
* 1.使⽤@PropertySource注解可以加载多个配置⽂件,value是数组
* 2.也可以通过PropertySources加载多个PropertySource,@PropertySource是⼀个可重复注解
*/
@PropertySource(value ={"classpath:config.properties"})
@Configuration
public class PropertyConfig {
@Bean("propertyValue")
public PropertyValue propertyValue(){
return new PropertyValue();
}
}
测试类
package com.liangpengju.annotation;
import fig.PropertyConfig;
import ity.PropertyValue;
import org.junit.Test;
import t.ApplicationContext;
import t.annotation.AnnotationConfigApplicationContext;
import nv.Environment;
public class PropertyValueTest {
@Test
public void testPropertyValue(){
AnnotationConfigApplicationContext context =new AnnotationConfigApplicationContext(PropertyConfig.class);
printBeans(context);
PropertyValue propertyValue =(PropertyValue) Bean("propertyValue");
System.out.println(propertyValue);//PropertyValue{name='feiyue', age=25, city='Beijing'} //使⽤
Environment environment = Environment();
String property = Property("prop.city");
System.out.println("prop.city="+property);//Beijing
context.close();
}
private void printBeans(AnnotationConfigApplicationContext context){
//根据类型获取bean的id
System.out.println("IOC容器所有的");
String[] definitionNames = BeanDefinitionNames();
for(String name : definitionNames){
System.out.println(name);
}
}
}
@PropertySources注解
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface PropertySources {
PropertySource[]value();
}
@PropertySource注解
是⼀个可重复配置的注解,可以重复配置到@PropertySources注解中
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Repeatable(PropertySources.class)
public @interface PropertySource {
/**
*/
String name()default"";
/**
* 指定资源⽂件路径,可以指定多个,使⽤逗号分隔
* {"classpath:/com/myco/app.properties"}
* or {@code "file:/path/l"}.
*/
String[]value();
/**
* 指定没有加载到的资源将会被忽略
*/
boolean ignoreResourceNotFound()default false;
/**
* 给定的资源⽂件指定编码格式, e.g. "UTF-8".
*/
String encoding()default"";
/**
* 指定⼀个⾃定义的factory
*/
Class<?extends PropertySourceFactory>factory()default PropertySourceFactory.class; }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论