首先创建一个Dog类
(1)使用@Component @ConfigurationProperties(prefix = “”)注解
public class Dog {
private String name;
private Integer age ;
public String toString() {
return "Dog{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Integer getAge() { return age;}
public void setAge(Integer age) { this.age = age; }
}
创建一个person类
加入注解
@Component
@ConfigurationProperties(prefix = “”)
@Component
@ConfigurationProperties(prefix = "person")
public class Person {
private String lastname;
private Integer age;
private Boolean boos;
private Date birth;
private Map<String,Object> maps;
private List<Object> list;
private Dog dog;
@Override
public String toString() {
return "Person{" +
"lastname='" + lastname + '\'' +
", age=" + age +
", boos=" + boos +
", birth=" + birth +
", maps=" + maps +
", list=" + list +
", dog=" + dog +
'}';
}
get.......set
}
创建Appliction.yml文件给person赋值,注意.yml文件配置的的格式
person:
lastname: zhu
age: 18
boss: true
birth: 1000/12/12
maps: {k1: vvvv,k2: sadffa}
list:
- lisi
- zhao
dog:
name: xiaogo
age: 2
运行后 控制台输出
Person{lastname=‘zhu’, age=18, boos=null, birth=Thu Dec 12 00:00:00 CST 1000, maps={k1=vvvv, k2=sadffa}, list=[lisi, zhao], dog=Dog{name=‘xiaogo’, age=2}}
(2)使用@Value进行属性的注入
@Component
public class Person {
@Value("罗")
private String lastname;
@Value("#{11*2}")
private Integer age;
@Value("true")
private Boolean boos;
@Value获取值和@ConfigurationProperties的区别
@ConfigurationProperties可以批量注入配置文件中的属性
支持松散绑定
不支持计算#{}
支持JSR303数据校验
支持复杂类型封装:map
@Value 一个一个指定
不支持松散绑定
支持计算#{}
不支持JSR303数据校验
不支持复杂类型封装:map
使用JSR303进行数据校验
@Component
@ConfigurationProperties(prefix = "person")
@Validated
public class Person {
@Email
private String lastname; // lastname必须为一个邮箱地址
private Integer age;
private Boolean boos;
(3)使用@PropertySource注解
创建一个person.proterties配置文件
person:
lastname: zqb
age: 18
boss: true
birth: 1000/12/12
maps: {k1: vvvv,k2: sadffa}
list:
- lisi
- zhao
dog:
name: xiaogo
age: 2
使用注解绑定属性
@PropertySource(value = {"classpath:person.proterties"})
public class Person {
private String lastname;
private Integer age;
private Boolean boos;
private Date birth;
private Map<String,Object> maps;
private List<Object> list;
private Dog dog;
(4)使用@ImportResource:导入spring的配置文件,让配置文件的内容生效
写在
@ImporResource(location3={"classpath:beans.xml"})
@SpringBootApplication
public class Demo1Application {....省略}
Spring boot 推荐使用纯注解的方式添加属性
(5)使用@Bean注解
实体类POJO
public class Person {
private String name;
private Integer age;
public Person() {
}
public Person(String name, Integer age) {
this.name = name;
this.age = age;
}
// 省略 getter setter
// 后续会省略 toString 方法, 使用 IDE 自动生成就可以了
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
xml配置方法
<bean id="person" class="me.sjl.bean.Person">
<property name="age" value="18"/>
<property name="name" value="ZQB"/>
</bean>
测试代码
public static void main(String[] args) {
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:/applicationContext.xml");
Person person = (Person) ctx.getBean("person");
System.out.println(person);
}
测试结果
Person{name=‘ZQB’,age=18}
创建一个Config类
使用@Bean注解
@Configuration
public class BeanConfig {
@Bean
public Person person() {
return new Person("ZQB", 20);
}
}
测试结果同上