Bean实例在调用无参构造器创建了空值对象后,就要对Bean对象的属性进行初始化。初始化是由容器自动完成的,称为注入。常用方式分为设值注入和构造注入。
3.1 基于xml-设值注入
通过set方法注入,基本数据类型用value,引用数据类型用ref。
applicationContext.xml
<bean id="mySchool" class="com.bjpowernode.di01.School">
<property name="name" value="清华大学" />
</bean>
<bean id="myStudent" class="com.bjpowernode.di01.Student">
<property name="name" value="张三" />
<property name="age" value="23"></property>
<property name="school" ref="mySchool"></property>
</bean>
School.class
public class School {
private String name;
public void setName(String name) {
this.name = name;
}
}
Student.class
public class Student {
private String name;
private int age;
private School school;
public Student() {
super();
}
public void setSchool(School school) {
this.school = school;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + ", school=" + school + "]";
}
}
3.2 基于xml-为集合属性赋值
Some.class
public class Some {
private School[] schools;
private String[] myStrs;
private List<String> myList;
private Set<String> mySet;
private Map<String,Object> myMap;
private Properties myPros;
...
set 方法
...
@Override
public String toString() {
return "Some [schools=" + Arrays.toString(schools) + ", mystrs=" + Arrays.toString(myStrs) + ", myList="
+ myList + ", mySet=" + mySet + ", myMap=" + myMap + ", myPros=" + myPros + "]";
}
}
applicationContext.xml
<bean id="mySchool1" class="com.bjpowernode.di02.School">
<property name="name" value="清华大学" />
</bean>
<bean id="mySchool2" class="com.bjpowernode.di02.School">
<property name="name" value="北京大学" />
</bean>
<bean id="mySome" class="com.bjpowernode.di02.Some">
<property name="schools">
<array>
<ref bean="mySchool1"/>
<ref bean="mySchool2"/>
</array>
</property>
<property name="myStrs">
<array>
<value>山东</value>
<value>临沂</value>
</array>
</property>
<property name="myList">
<list>
<value>平邑</value>
<value>一村</value>
</list>
</property>
<property name="mySet">
<set>
<value>一街道</value>
<value>二街道</value>
</set>
</property>
<property name="myMap">
<map>
<entry key="mobile" value="15011111111"></entry>
<entry key="qq" value="11111"></entry>
</map>
</property>
<property name="myPros">
<props>
<prop key="age">12</prop>
<prop key="sex">femal</prop>
</props>
</property>
</bean>
3.3 基于xml-域属性-自动注入
3.3.1 基于xml-autowire="byName"
会从容器中查找与Student类中域属性名scholl相同的Bean的id,并将该Bean对象自动注入给该域属性
<bean id="school" class="com.bjpowernode.di01.School">
<property name="name" value="清华大学" />
</bean>
<bean id="myStudent" class="com.bjpowernode.di01.Student" autowire="byName">
<property name="name" value="张三" />
<property name="age" value="23"></property>
</bean>
3.3.2 基于xml-autowire="byType"
会从容器中查找与Student类中域属性类型School具有is-a关系的Bean,并将该Bean对象自动注入给该域属性
<bean id="mySchool" class="com.bjpowernode.di01.School">
<property name="name" value="清华大学" />
</bean>
<bean id="myStudent" class="com.bjpowernode.di01.Student" autowire="byType">
<property name="name" value="张三" />
<property name="age" value="23"></property>
</bean>
3.3.3 基于xml-DI-SPEL注入
<bean id="myPerson" class="com.bjpowernode.di01.Person">
<property name="pname" value="lisi"></property>
<!-- 通过spring el表达式调用静态方法 -->
<property name="page" value="#{T(java.lang.Math).random() * 50}"></property>
</bean>
<bean id="myStudent" class="com.bjpowernode.di01.Student">
<!-- 调用其它Bean的属性 -->
<property name="name" value="#{myPerson.pname}"></property>
<!-- 运算 -->
<property name="age" value="#{myPerson.page > 25 ? 25 : myPerson.page}"></property>
<!-- 调用其它Bean的成员方法 -->
<property name="age" value="#{myPerson.computeAge()}"></property>
</bean>
3.4 为应用指定多个Spring配置文件
(1)、平等关系的配置文件
两个配置文件:
com/bjpowernode/di01/spring-base.xml
com/bjpowernode/di01/spring-beans.xml
创建容器:
String source01 = "com/bjpowernode/di01/spring-base.xml";
String source02 = "com/bjpowernode/di01/spring-beans.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(source01,source02);
通配符
String source = "com/bjpowernode/di01/spring-*.xml";
ApplicationContext ac = new ClassPathXmlApplicationContext(source);
(2)、包含关系的配置文件
三个配置文件:
com/bjpowernode/di01/applicationContext.xml
com/bjpowernode/di01/spring-base.xml
com/bjpowernode/di01/spring-beans.xml
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
...
>
<!--引入其它的配置文件-->
<import resource="classpath:com/bjpowernode/di01/spring-base.xml" />
<import resource="classpath:com/bjpowernode/di01/spring-beans.xml" />
<!--通配符-->
<import resource="classpath:com/bjpowernode/di01/spring-*.xml" />