属性注入:如何给对象中的属性设值
1 构造注入
通过构造方法实现属性的注入,第一步需要在实体类中添加对应的有参构造方法,第二步在配置文件中添加对应的配置信息
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
//指定引入的配置文件
<import resource="applicationContext-*.xml"/>
//constructor-arg 通过构造函数注入
<bean id="person" class="com.zyz.spring.Person">
<constructor-arg name="name" value="maxiaosan"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="food" ref="food"></constructor-arg>
</bean>
</beans>
applicationContext-service.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="food" class="com.zyz.spring.Food">
<constructor-arg name="name" value="shuijiao"></constructor-arg>
</bean>
通过下标来指定属性赋值
<bean id="food" class="com.zyz.spring.Food">
<constructor-arg index="0" value="shuijiao"></constructor-arg>
</bean>
</beans>
Person 实体类要含有有参构造方法
public class Person {
private String name;
private int age;
private Food food;
public Person(String name, int age, Food food) {
super();
this.name = name;
this.age = age;
this.food = food;
}
public Food getFood() {
return food;
}
public void setFood(Food food) {
this.food = food;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", food=" + food.toString() + "]";
}
}
Food
public class Food {
private String name;
public Food(String name) {
super();
this.name = name;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Food [name=" + name + "]";
}
}
Test.java
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Person person = (Person)ctx.getBean("person");
System.out.println(person.toString());
配置的简化方式: c 名称空间
添加C名称空间
xmlns:c=“http://www.springframework.org/schema/c”
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:c="http://www.springframework.org/schema/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
//具体使用
<bean class="com.zyz.spring.Food" c:name="niurou"></bean>
//通过下标来给属性赋值
<bean class="com.zyz.spring.Food" c:_0="niurou"></bean>
</beans>
Food 要有一个有参构造方法
public class Food {
private String name;
public Food(String name) {
super();
this.name = name;
}
@Override
public String toString() {
return "Food [name=" + name + "]";
}
}
Test
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Food food= (Food)ctx.getBean(Food.class);
System.out.println(food.toString());
数组和集合注入、 Map和Properties类型注入
创建一个实体类 里边私有属性有list集合 set,map,Properties
public class Person {
private String name;
private int age;
private Food food;
private Properties gift;
private List<String> list;
private Set<String> set;
private Map<String, String> map;
private String[] array;
public String[] getArray() {
return array;
}
public void setArray(String[] array) {
this.array = array;
}
public List<String> getList() {
return list;
}
public void setList(List<String> list) {
this.list = list;
}
public Set<String> getSet() {
return set;
}
public void setSet(Set<String> set) {
this.set = set;
}
public Map<String, String> getMap() {
return map;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public Properties getGift() {
return gift;
}
public void setGift(Properties gift) {
this.gift = gift;
}
public Food getFood() {
return food;
}
public void setFood(Food food) {
this.food = food;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<import resource="applicationContext-*.xml"/>
<!-- 对象属性 Spring 会调起 对象的 set方法 来 DI -->
<bean id="person" name="human,star" class="com.zyz.spring.Person">
<property name="name"><value>张无忌</value></property>
<property name="age" value="18" />
如果初始化的属性的类型是自定义的对象,那么注入的时候可以通过 ref 属性来从IoC容器中获取合
适的对象注入
<property name="food" ref="food" />
<property name="list">
<array>
<value>a</value>
<value>b</value>
<value>c</value>
</array>
</property>
<property name="set">
<array>
<value>a</value>
<value>b</value>
<value>c</value>
<value>c</value>
</array>
</property>
<property name="map">
<props>
<prop key="a">1</prop>
<prop key="b">2</prop>
</props>
<!--
<map>
<entry key="a" value="1"></entry>
<entry key="b" value="2"></entry>
<entry key="b" value="2"></entry>
</map>
-->
</property>
<property name="gift">
<value>
douban=http://douban.com/movie/xx.html
paoniu=100,
dushu=200
</value>
</property>
</bean>
<bean id="food" class="com.zyz.spring.Food"></bean>
<alias name="person" alias="person2"/>
</beans>
Test
public static void main(String[] args) {
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Person person1 = ctx.getBean("person",Person.class);
person1.getFood().toString();
System.out.println(ToStringBuilder.reflectionToString(person1));
}
本文含有隐藏内容,请 开通VIP 后查看