1、构造方法的方式之属性注入
关键点:提供有参构造;普通类型属性注入值用value,引用类型属性注入值用ref引用另一个bean的id
使用标签:constructor-arg
下面举例
学生成绩类
/**
* <p>
* 学生成绩实体类
* <p>
*/
public class Grade {
private String subject; // 科目
private double score; // 分数
// 构造方法
public Grade(String subject, double score) {
this.subject = subject;
this.score = score;
}
}
学生类
/**
* <p>
* 学生实体类
* <p>
*/
public class Student {
private String name; // 姓名
private String classes; // 班级
private Grade grade; // 某课程成绩
// 构造方法
public Student(String name, String classes, Grade grade) {
this.name = name;
this.classes = classes;
this.grade = grade;
}
}
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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 构造方法的方式的属性注入 -->
<bean id="gradeId" class="com.shiory.ioc.xml.Grade">
<!--普通类型属性注入-->
<constructor-arg name="subject" value="英语"/>
<constructor-arg name="score" value="99" />
</bean>
<bean id="student" class="com.shiory.ioc.xml.Student">
<!--普通类型属性注入-->
<constructor-arg name="name" value="张三"/>
<constructor-arg name="classes" value="九年级1班" />
<!--引用类型属性注入-->
<constructor-arg name="grade" ref="gradeId" />
</bean>
</beans>
测试,给学生类和成绩类重写toString方法,然后再测试
/**
* 构造方法注入属性
*/
@Test
public void ioc04(){
// 1、创建Spring的工厂
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// 2、从工厂中获取实例对象
Student student = context.getBean("student", Student.class);
System.out.println(student.toString());
}
2、Setter方法的方式之属性注入
关键点:提供Setter方法;普通类型属性注入值用value,引用类型属性注入值用ref引用另一个bean的id
使用标签:property
学生类提供Setter方法
配置文件
<bean id="student2" class="com.shiory.ioc.xml.Student">
<!--普通类型属性注入-->
<property name="name" value="李四"/>
<property name="classes" value="九年级2班" />
<!--引用类型属性注入-->
<property name="grade" ref="gradeId" />
</bean>
3、SpEL的方式之属性注入(Spring3.0以后)
SpEL:Spring Expression Language,Spring的表达式语言
关键点:提供Setter、Getter方法;
语法:#{SpEL}
使用标签:property
配置文件
<!-- SpEL的方式的属性注入 -->
<bean id="student3" class="com.shiory.ioc.xml.Student">
<!--普通类型属性注入-->
<property name="name" value="#{student2.name}"/><!--此处相当于student2.getName()-->
<property name="classes" value="#{'九年级3班'}" />
<!--引用类型属性注入-->
<property name="grade" value="#{gradeId}" />
</bean>
4、P名称空间的方式之属性注入(Spring2.5以后)
通过引入p名称空间完成属性的注入
关键点:提供Setter、Getter方法;引入p名称空间约束
语法:
- 普通属性写法:p:属性名="值"
- 对象属性写法:p:属性名-ref="值"
配置文件
1、引入p名称空间约束
xmlns:p="http://www.springframework.org/schema/p"
2、 使用
<!-- P名称空间的方式的属性注入 -->
<bean id="gradeId1" class="com.shiory.ioc.xml.Grade" p:subject="数学" p:score="100"></bean>
<bean id="student4" class="com.shiory.ioc.xml.Student" p:name="王五" p:classes="九年级1班" p:grade-ref="gradeId1"></bean>