spring——Spring 注入内部Bean——构造函数方式注入内部 Bean

news2024/12/23 2:24:00

项目依赖:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>org.example</groupId>
    <artifactId>ssw</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.6</version>
        </dependency>
    </dependencies>

</project>

dept类:

package org.example;

public class Dept {


    //部门编号
    private String deptNo;


    //部门名称
    private String deptName;


    public Dept(String deptNo, String deptName) {
        this.deptNo = deptNo;
        this.deptName = deptName;
    }


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

employee类:

package org.example;

public class Employee {

    //员工编号
    private String empNo;

    //员工姓名
    private String empName;

    //部门信息
    private Dept dept;


    public Employee(String empNo, String empName, Dept dept) {
        this.empNo = empNo;
        this.empName = empName;
        this.dept = dept;
    }


    @Override
    public String toString() {
        return "Employee{" +
                "empNo='" + empNo + '\'' +
                ", empName='" + empName + '\'' +
                ", dept=" + dept +
                '}';
    }
}

bean.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="employee" class="org.example.Employee">
        <constructor-arg name="empNo" value="002"></constructor-arg>
        <constructor-arg name="empName" value="小李"></constructor-arg>
        <constructor-arg name="dept">
            <!--内部bean-->
            <bean class="org.example.Dept">
                <constructor-arg name="deptNo" value="005"></constructor-arg>
                <constructor-arg name="deptName" value="运维部"></constructor-arg>
            </bean>
        </constructor-arg>
    </bean>



</beans>

执行:

package org.example;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main
{
    private static final Log LOGGER = LogFactory.getLog(Main.class);

    public static void main(String[] args)
    {
        //获取 ApplicationContext 容器
        ApplicationContext context = new ClassPathXmlApplicationContext("bean.xml");

        //获取名为 employee 的 Bean
        Employee employee = context.getBean("employee", Employee.class);

        //通过日志打印信息
        LOGGER.info(employee.toString());

        System.out.println(employee.toString());

    }

}

执行结果:

=======================================================================

构造函数方式注入内部 Bean

我们可以通过构造方法注入内部 Bean。此时,我们只需要在 <bean> 标签下的 <constructor-arg> 元素中,再次使用 <bean> 元素对内部 Bean 进行定义,格式如下。

示例

下面我们就通过一个实例,演示下如何在通过构造方法的方式注入内部 Bean。
1. 参考《第一个 Spring 程序》,新建一个名为 my-spring-demo3 的 Java 项目。
2. 在 net.biancheng.c 包中,创建一个名为 Dept 的类,代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
package  net.biancheng.c;
public  class  Dept {
     //部门编号
     private  String deptNo;
     //部门名称
     private  String deptName;
     public  Dept(String deptNo, String deptName) {
         this .deptNo = deptNo;
         this .deptName = deptName;
     }
     @Override
     public  String toString() {
         return  "Dept{"  +
                 "deptNo='"  + deptNo + '\ ''  +
                 ", deptName='"  + deptName + '\ ''  +
                 '}' ;
     }
}

3. 在 net.biancheng.c 包下,创建一个名为 Employee 的类,代码如下。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
package  net.biancheng.c;
public  class  Employee {
     //员工编号
     private  String empNo;
     //员工姓名
     private  String empName;
     //部门信息
     private  Dept dept;
     public  Employee(String empNo, String empName, Dept dept) {
         this .empNo = empNo;
         this .empName = empName;
         this .dept = dept;
     }
     @Override
     public  String toString() {
         return  "Employee{"  +
                 "empNo='"  + empNo + '\ ''  +
                 ", empName='"  + empName + '\ ''  +
                 ", dept="  + dept +
                 '}' ;
     }
}

4. 在 src 目录下创建 Spring 配置文件 Beans.xml,配置如下。

5. 在 net.biancheng.c 包下,创建一个名为 MainApp 的类,代码如下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MySQL进阶篇】存储引擎

&#x1f349;个人主页&#xff1a;个人主页 &#x1f353;系列专栏&#xff1a;MySQL数据库 目录 1.MySQL体系结构 1). 连接层 2). 服务层 3). 引擎层 4). 存储层 2.存储引擎介绍 3.存储引擎特点 1. InnoDB 2.MyISAM 3.Memory 4.区别及特点 4.存储引擎选择 1.MySQ…

MAC QT OpenGL 图像曝光度调节

目录 一.MAC QT OpenGL 图像曝光度调节演示 1.原始图片2.效果演示 二.MAC QT OpenGL 图像曝光度调节源码下载三.其他平台图像曝光度调节版本 1.IOS 曝光度演示效果2.Windows OpenGL ES 曝光度演示效果3.Windows OpenGL 曝光度演示效果 四.猜你喜欢 零基础 OpenGL ES 学习路线推…

39-kafka-监控Eagle

39-kafka-监控Eagle&#xff1a; Eagle的安装 1.修改 kafka 启动命令 修改 kafka-server-start.sh 命令中 if [ "x$KAFKA_HEAP_OPTS" "x" ]; then export KAFKA_HEAP_OPTS"-Xmx1G -Xms1G" fi 为 if [ "x$KAFKA_HEAP_OPTS" &qu…

功能测试(八)—— APP之专项测试、性能测试、性能测试工具SoloPi

目录 APP测试要点 目标 一、APP专项测试 1.1 兼容性 1.2 安装 1.3 卸载 1.4 升级 1.5 干扰测试(交叉事件测试) 1.6 Push推送 1.7 用户体验 二、 性能测试工具 2.1 APP性能测试工具介绍 —— SoloPi简介 2.2 APP性能测试工具 —— SoloPi使用 三、APP性能测试 3.…

English Learning - L2 窥得大段表达门径 2022.12.8 周四

English Learning - L2 窥得大段表达门径 2022.12.8 周四引言2 形容词2.1 -ing 形容词 VS -ed 形容词核心思想举例3 名词3.1 修饰成分修饰成分的排列的黄金原则&#xff1a;左二右六举例3.2 名词的数3.2.1 "名词 介词/副词/不定式 等" 构成的复合名词变复数&#xf…

Spring Boot 使用 Micrometer 集成 Prometheus 监控 Java 应用性能

一、背景 SpringBoot的应用监控方案比较多,SpringBoot + Prometheus + Grafana是目前比较常用的方案之一。它们三者之间的关系大概如下图: 二、Micrometer的介绍 Micrometer为Java 平台上的性能数据收集提供了一个通用的 API,它提供了多种度量指标类型(Timers、Guauges、…

【强化学习论文合集】十三.2018机器人与自动化国际会议论文(ICRA2018)

强化学习(Reinforcement Learning, RL),又称再励学习、评价学习或增强学习,是机器学习的范式和方法论之一,用于描述和解决智能体(agent)在与环境的交互过程中通过学习策略以达成回报最大化或实现特定目标的问题。 本专栏整理了近几年国际顶级会议中,涉及强化学习(Rein…

超详细的pytest教程(二)之前后置方法和fixture机制

前言 上一篇文章入门篇咱们介绍了pytest的基本使用&#xff0c;这一篇文章专门给大家讲解pytest中关于用例执行的前后置步骤处理,pytest中用例执行的前后置处理既可以通过测试夹具(fixtrue)来实现&#xff0c;也可以通过xunit 风格的前后置方法来实现。接下来我们一起看看如何…

Unity - 技术美术

198.Shader Graph 旗帜飘扬 官方教程链接&#xff1a;https://learn.unity.com/project/make-a-flag-move-with-shadergraph 本节课程文档&#xff1a;https://gitee.com/chutianshu1981/AwesomeUnityTutorial/blob/main/%E5%9B%BE%E5%BD%A2-%E6%8A%80%E6%9C%AF%E7%BE%8E%E5%B…

ElasticSearch入门到springboot使用

文章目录1.存储引擎产品性能对比2.es安装1.创建目录2.创建挂载的配置文件3.编写docker-compose4.添加文件夹权限5.启动es与kibana6.开放端口7.测试访问8.安装IK分词器3.es核心概念1.文档&#xff1a;就是一条数据2.类型&#xff1a;表字段和类型3.索引&#xff1a;就是数据库4.…

【WIN】Windows10 开启远程连接图形化界面(mstsc)

CONTENTwindows10 rdp 开启远程连接开启远程连接win10 专业版遇到的问题3389 端口不可用简述具体解决windows10 rdp 开启远程连接 开启远程连接 win10 专业版 快捷键&#xff1a; winI 打开设置&#xff0c;然后 #mermaid-svg-bTRFQYmaW8UwxJ5Y {font-family:"trebuche…

java计算机毕业设计ssm医疗垃圾管理系统f5aj8(附源码、数据库)

java计算机毕业设计ssm医疗垃圾管理系统f5aj8&#xff08;附源码、数据库&#xff09; 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat8.5 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff0…

针对低功率/低电源电压应用的5MBd数字光耦合器

针对低功率/低电源电压应用的5MBd数字光耦合器 介绍 电气系统中的数字光电耦合器提供高压绝缘和高压绝缘数据传输时的噪声抑制。一个高质量的绝缘屏障&#xff0c;在里面光耦合器需要提供卓越的可靠性和耐久性信号隔离。 除了绝缘和噪音抑制能力&#xff0c;新的5MBd数字光耦…

Image-Line升级FL Studio21水果DAW音乐工作站

FL Studio水果21加入了更快、更精确的音频编辑&#xff0c;改进了内容搜索&#xff0c;DAW“情绪主题”控制&#xff0c;甚至还有更多的灵感、创意工具。 如果你真正需要中文语言&#xff0c;你需要更新到FL Studio 21版本打开你的FL设置&#xff0c;在通用&#xff08;Genera…

Wireshark | 猿如意

文章目录一、前言二、猿如意介绍客户端网页版三、Wireshark简介发展史使用猿如意下载功能介绍使用方法使用感受一、前言 我曾经有过这样的烦恼&#xff1a;去下载一个应用&#xff0c;结果百度到了一大堆广告&#xff0c;最后下载的也不是官方版本&#xff0c;还捆绑了一大堆AP…

SpringBoot中使用Easyexcel实现Excel导入导出功能(二)

目录 常规导出 大批量数据导出 复杂表头的导出 日期、数字、自定义格式转换后导出 常规导出 常规导出excel有两种&#xff0c;个人比较推荐第一种&#xff1a; 1、新建一个导出数据的实体类&#xff0c;用ExcelProperty()注解标明excel中列的中文名称&#xff1b;如果实体的…

maven学习手册

maven学习手册1.maven简介1.1 传统项目的弊端1.2 Maven是什么2.maven的安装和配置2.1 maven的安装2.2 为阿里云设置代理仓库2.3 maven常用命令简单说明3.maven实战3.1 一个简单的maven项目3.2 maven常用命令简单说明3.3 为这个简单的maven项目安装依赖3.4 maven常见标签说明4.依…

在搭载 M1 及 M2 芯片 MacBook 设备上玩 Stable Diffusion 模型

本篇文章&#xff0c;我们聊了如何使用搭载了 Apple Silicon 芯片&#xff08;M1 和 M2 CPU&#xff09;的 MacBook 设备上运行 Stable Diffusion 模型。 写在前面 在上一篇文章《使用 Docker 来快速上手中文 Stable Diffusion 模型&#xff1a;太乙》中&#xff0c;我们聊过…

传感器和变送器有什么区别?工业网关能用吗?

传感器和变送器在自动控制领域都有重要作用&#xff0c;但很容易混淆掉&#xff0c;两者有区别也有联系。 传感器是可以将感受到的信息转换成电信号或者其他信号&#xff0c;如将温度、压力、物料、气体等信息转换成电信号&#xff0c;从而使得这些数据可以网络中传输。 变送器…

软件测试必须知道的方法和知识

“软件测试技术是软件开发过程中的一个重要组成部分&#xff0c;是贯穿整个软件开发生命周期、对软件产品&#xff08;包括阶段性产品&#xff09;进行验证和确认的活动过程&#xff0c;其目的是尽快尽早地发现在软件产品中所存在的各种问题——与用户需求、预先定义的不一致性…