07-Spring的属性注入(基于XML)

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>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值