当前位置: 首页 > article >正文

Spring6梳理9—— 依赖注入之注入对象类型属性

9.1  依赖注入之外部注入对象类型属性

9.1.1  创建dept与emp类

1.dept类

package com.atguigu.spring6.iocxml.ditest;


//部门类
public class Dept {
    private String dname;

    public String getDname() {
        return dname;
    }

    public void setDname(String dname) {
        this.dname = dname;
    }

    public void info() {
        System.out.println("部门名称是:"+dname);
    }
}

 2.emp类

package com.atguigu.spring6.iocxml.ditest;
//员工类
public class Emp {
    private Dept dept;
    private String ename;
    private Integer age;

    public Dept getDept() {
        return dept;
    }

    public void setDept(Dept dept) {
        this.dept = dept;
    }

    public String getEname() {
        return ename;
    }

    public void setEname(String ename) {
        this.ename = ename;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public void work() {
        System.out.println(ename + "工作到了" + age);
        dept.info();
    }
}

 由于一个部门有多个员工,因此部门与员工的关系为一对多,所以将唯一的Dept作为引用的bean,外键为

9.1.2  创建配置文件

<?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="dept" class="com.atguigu.spring6.iocxml.ditest.Dept">
        <property name="dname" value="安保部"></property>
    </bean>
    <bean id="emp" class="com.atguigu.spring6.iocxml.ditest.Emp">
        <property name="ename" value="lucy"></property>
        <property name="age" value="50"></property>
    <!--注入对象类型属性
       private Dept dept;
    -->
        <property name="dept" ref="dept"></property>
    </bean>
</beans>

9.1.3  创建测试类

package com.atguigu.spring6.iocxml.ditest;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

/**
 * @package: com.atguigu.spring6.iocxml.ditest
 * @className: TestEmp
 * @Description:
 * @author: haozihua
 * @date: 2024/9/18 11:10
 */
public class TestEmp {
    public static void main(String[] args) {
        ApplicationContext context
                = new ClassPathXmlApplicationContext("bean-ref.xml");
        Emp emp = context.getBean("emp", Emp.class);
        emp.work();
    }
}

9.1.4  运行结果

由运行结果可以得出,当实体类出现需要注入对象的情况下,可以使用

<property name="dept" ref="dept"></property>

对对象进行引用,从而在实体类对象中注入另一个实体类对象,使用被注入的对象的方法变量等内容

9.2  依赖注入之内部注入对象类型

<!--    内部注入bean-->
    <bean id="emp2" class="com.atguigu.spring6.iocxml.ditest.Emp">
        <property name="ename" value="mary"></property>
        <property name="age" value="20"></property>
        <!--注入对象类型属性
           private Dept dept;
        -->
        <property name="dept"><!--与实体类保持一致-->
            <bean class="com.atguigu.spring6.iocxml.ditest.Dept">
                <property name="dname" value="财务部"></property>
            </bean>
        </property>
    </bean>

内部注入对象时,需要在<property></property>标签内部设置name,以及内部<bean></bean>标签中的class属性

由于获取Bean是基于getter()和setter()赋值,因此<property></property>标签的name属性值必须与实体类变量保持一致

9.3  依赖注入之内部注入对象类型

<!--    级联注入bean-->
    <bean id="emp3" class="com.atguigu.spring6.iocxml.ditest.Emp">
        <property name="ename" value="李湘"></property>
        <property name="age" value="30"></property>
        <property name="dept" ref="dept3"></property>
        <property name="dept.dname" value="人事部"></property>
    </bean>

级联注入对象时,需要注意property的name属性与实体类保持一致,ref必须引用的是xml文件中定义好的外部bean                                                                                              


http://www.kler.cn/a/310486.html

相关文章:

  • RHCE的学习(16)(shell脚本编程)
  • 数学建模模型算法-Python实现
  • NVIDIA NIM 简介
  • Chromium 中sqlite数据库操作演示c++
  • 【C++】 list 与 string 基础与实现字符串操作
  • 中兴光猫修改SN,MAC,修改地区,异地注册,改桥接,路由拨号
  • array和linked list的区别
  • 从IPC摄像机读取视频帧解码并转化为YUV数据到转化为Bitmap
  • 探索Java中的设计模式:原则与实例
  • ubuntu24系统普通用户免密切换到root用户
  • 整流器制造5G智能工厂物联数字孪生平台,推进制造业数字化转型
  • 【Delphi】知道控件名称(字符串),访问控件
  • 数据结构与算法-18算法专向(hash)
  • 浅显易懂的Git教程
  • c基本知识
  • Windows10电脑右下角时间显示到秒
  • Golang | Leetcode Golang题解之第414题第三大的数
  • C++(学习)2024.9.18
  • Zabbix企业分布式监控(Zabbix Enterprise Distributed Monitoring)
  • Electron 图标修改
  • 深度学习 之 常见损失函数简介:名称、作用及用法
  • mysql 8.0 日期维度表生成(可运行)
  • CSS传统布局方法(补充)——WEB开发系列37
  • 【路径规划】WDM网络中RWA问题的教育网络规划工具(基于MILP和启发式)
  • 图说GPT网络结构(参数量与计算量估计)
  • 何时空仓库