IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> 一步一个脚印学习Spring框架(二)内部bean注入与级联赋值 -> 正文阅读

[Java知识库]一步一个脚印学习Spring框架(二)内部bean注入与级联赋值

作者:recommend-item-box type_blog clearfix

距离上一次更新Spring框架已经过去一个多月了,不是因为不想写,课设太多了,没有时间学习Spring,今天来更新一下Spring的内部bean注入和级联赋值

内部bean注入

内部bean有点类似Java的内部类,话不多说,通过例子来讲解。假设有两个类,一个是Dept类(部门类),有属性dname(String类型),一个是Emp类(员工类),有属性String ename、String gender,Dept dept(一个员工属于一个部门),Emp有方法showInfo(),打印员工的姓名、性别以及部门。并为这两个类的属性设置getter和setter方法。

Dept类

public class Dept {


    public String dname;

    public String getDname() {
        return dname;
    }

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

    @Override
    public String toString() {
        return "Dept{" +
                "dname='" + dname + '\'' +
                '}';
    }
}

Emp类

public class Emp {

    public String ename;
    public String gender;
    public Dept dept;

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

    public Dept getDept() {
        return dept;
    }

    public String getEname() {
        return ename;
    }

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

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public void showInfo(){
        System.out.println("ename ==> "+ename+",gender ==> "+gender+",dept ==> "+dept);
    }
}

创建完成这两个类之后,在src目录下创建Spring config文件,具体在New->XML Configuration file->Spring Config,这里我将这个文件命名为bean1.xml
在这里插入图片描述配置文件创建完成之后就是需要在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注入练习-->
    <bean id="emp" class="Day02.bean.Emp">
        <property name="ename" value="张三"></property>
        <property name="gender" value=""></property>
        <!--属性为类时,在内部签到bean-->
        <property name="dept">
            <bean id="dept" class="Day02.bean.Dept">
                <property name="dname" value="安保部门"></property>
            </bean>
        </property>
    </bean>
</beans>

可以看到,当属性不是基本数据类型,而是一个类时,在原有的bean标签中使用property标签,并给该标签的name属性赋值(一般为对象名,也可以不是),并在该property嵌套一个bean标签,该标签的id属性的值要与property的name标签的name属性值相同,我这里都是dept,之后在嵌套的bean标签中使用propperty标签来注入dept的dname属性。

下面编写测试代码

    @Test
    public void Test1(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        Emp emp = context.getBean("emp", Emp.class);
        emp.showInfo();
    }

运行结果
在这里插入图片描述

级联赋值

其实刚刚的内部bean注入它本身也是属于级联赋值,级联赋值是向有关联的类中注入他的属性的值,比如和Emp类有关联的Dept类,那就是向Dept类中注入属性值,级联赋值有两种方式,具体看下面例子。

方式一

<?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="emp" class="Day02.bean.Emp">
        <property name="ename" value="张三"/>
        <property name="gender" value=""/>
        <property name="dept" ref="dept"/>
    </bean>
    <bean id="dept" class="Day02.bean.Dept">
        <property name="dname" value="安保部门"/>
    </bean>
</beans>

在Emp类的bean标签中使用标签property,name属性同样设置为对象名,此时不再使用value上古星赋值,而是使用ref属性,同时需要在使用外部类注入的方法将Dept注入,此时将ref属性的值指向Dept类bean标签的id属性的值,即这两个属性值要相同。

下面同样编写测试代码,其实只要把上述bean1.xml,换成新的文件名就行

    @Test
    public void Test1(){
        ApplicationContext context = new ClassPathXmlApplicationContext("bean2.xml");
        Emp emp = context.getBean("emp", Emp.class);
        emp.showInfo();
    }

运行结果(两次结果其实一样))(

方式二

<?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="emp" class="Day02.bean.Emp">
        <property name="ename" value="张三"></property>
        <property name="gender" value=""></property>
        <property name="dept" ref="dept"></property>
        <property name="dept.dname" value="财务部"></property>
    </bean>
    <bean id="dept" class="Day02.bean.Dept">
    	<!--这里可以注入属性值也可以不注入-->
        <property name="dname" value="安保部门"/> 
    </bean>
</beans>

在Emp类的bean标签中使用property标签 name属性为对象名,使用ref标签,同样需要使用外部bean注入初始化Dept类,注意此时可以注入Dept的属性值,也可以不注入,将property的ref标签指向 Dept的bean标签的id属性后,在Emp中再次添加一个property标签,name属性值为dept.dname,也就是dept对象的dname属性,value属性给dname属性赋值 此时在Emp类中必须有Dept的getter和setter方法,不然会报错。要是Dept类不止一个属性就接着在后面继续添加property标签。

测试类也只是该xml文件名,这里就不写了,直接上运行结果
在这里插入图片描述

到这里内部bean和级联赋值就讲完了,我也是刚学完就直接写博客了,肯定有许多不足的地方请大家指正!

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-10-16 19:30:54  更:2021-10-16 19:32:42 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 22:44:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码