Spring定义Bean对象笔记

news2024/11/23 17:18:58

前言:面向对象语言最基本的元素就是对象,在Spring中把对象都封装为一个个的Bean,即通过Bean容器来管理对象;那么接下来我们看下在Spring中如何创建所需要的Bean。

一、环境准备

员工类

package com.xlb.bean;

public class Employee {
    private String name;
    private Integer gender;//0=女 1=男
    private Double salary;

    public void setName(String name) {
        this.name = name;
    }

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

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    public void showInfo(){
        System.out.println("name:" + name + " gender:" + gender + " salary:" + salary);
    }
}


一、通过XML配置文件创建Bean

定义配置文件:applicationContext.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 id="employee" class="com.xlb.bean.Employee"/>
</beans>

如上配置文件所示,就写完了一个最基本的Bean配置文件,在该配置文件中定义了一个名为employee的Bean对象,在代码中我们可以通过下面的方式获取该Bean对象。
测试结果

package com.xlb;

import com.xlb.bean.Employee;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestBean {
    public static void main(String[] args) {
        test1();
    }
    public static void test1(){
        ApplicationContext ctx =
                new ClassPathXmlApplicationContext("applicationContext.xml");

        Employee emp = ctx.getBean("employee", Employee.class);
        emp.showInfo();
    }
}

在这里插入图片描述
在上面的配置文件中,只配置了一个Bean对象,不过对于Bean对象内部的元素并没有进行初始化,这个初始化过程在Spring中称为依赖注入,只需要按照下面的方式配置即可:

<?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="employee" class="com.xlb.bean.Employee">
        <property name="name" value="sala"/>
        <property name="gender" value="0"/>
        <property name="salary" value="10000"/>
    </bean>
</beans>

再看一下输出结果:
在这里插入图片描述
可以看到,我们在上面配置的数据已经被初始化到对象中去。不过我们刚刚所注入的都是基本数据类型或者是其包装类型,如果我想注入集合类型或者引用类型,我们应该按照下面的方式:

简单修改下员工类

package com.xlb.bean;

import java.util.HashMap;
import java.util.List;
import java.util.Set;

public class Employee {
    private String name;
    private Integer gender;//0=女 1=男
    private Double salary;
    List<String> hobbyList;
    Set<String> hobbySet;
    HashMap<String, String> trafficSpend;//不同交通工具通勤耗时
    private Car car;//开的什么车
    private List<Car> carList;


    public void setName(String name) {
        this.name = name;
    }

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

    public void setSalary(Double salary) {
        this.salary = salary;
    }

    public void showInfo(){
        System.out.println("name:" + name + " gender:" + gender + " salary:" + salary);
        System.out.println("hobbyList:" + hobbyList + " hobbySet:" + hobbySet);
        System.out.println("trafficSpend:" + trafficSpend + " car:" + car);
        System.out.println("carList:" + carList);
    }

    public void setHobbyList(List<String> hobbyList) {
        this.hobbyList = hobbyList;
    }

    public void setHobbySet(Set<String> hobbySet) {
        this.hobbySet = hobbySet;
    }

    public void setTrafficSpend(HashMap<String, String> trafficSpend) {
        this.trafficSpend = trafficSpend;
    }

    public void setCar(Car car) {
        this.car = car;
    }

    public void setCarList(List<Car> carList) {
        this.carList = carList;
    }
}

配置类

<?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="car" class="com.xlb.bean.Car">
        <property name="name" value="梅赛德斯-迈巴赫"/>
        <property name="color" value="黑色"/>
        <property name="speed" value="300"/>
    </bean>

    <bean id="car1" class="com.xlb.bean.Car">
        <property name="name" value="凯迪拉克"/>
        <property name="color" value="黑色"/>
        <property name="speed" value="200"/>
    </bean>

    <bean id="car2" class="com.xlb.bean.Car">
        <property name="name" value="奥迪A4L"/>
        <property name="color" value="黑色"/>
        <property name="speed" value="200"/>
    </bean>

    <bean id="employee" class="com.xlb.bean.Employee">
        <property name="name" value="sala"/>
        <property name="gender" value="0"/>
        <property name="salary" value="10000"/>
        <property name="car" ref="car"/>
        <property name="hobbyList">
            <list>
                <value>游泳</value>
                <value>游泳</value>
                <value>跑步</value>
                <value>爬山</value>
            </list>
        </property>
        <property name="hobbySet">
            <set>
                <value>游泳</value>
                <value>游泳</value>
                <value>跑步</value>
                <value>爬山</value>
            </set>
        </property>
        <property name="trafficSpend">
            <map>
                <entry key="步行" value="60min"/>
                <entry key="开车" value="10min"/>
            </map>
        </property>
        <property name="carList">
            <list>
                <ref bean="car"/>
                <ref bean="car1"/>
                <ref bean="car2"/>
            </list>
        </property>
    </bean>
</beans>

测试结果
在这里插入图片描述
或者使用下面这种方式配置,即使用p命名空间简化配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">


    <bean id="car" class="com.xlb.bean.Car"
          p:name="梅赛德斯-迈巴赫"
          p:color="黑色"
          p:speed="300"/>

    <bean id="car1" class="com.xlb.bean.Car"
          p:name="凯迪拉克"
          p:color="黑色"
          p:speed="200"/>

    <bean id="car2" class="com.xlb.bean.Car"
          p:name="奥迪A4L"
          p:color="黑色"
          p:speed="200"/>

    <bean id="employee" class="com.xlb.bean.Employee"
          p:name="sala"
          p:gender="0"
          p:salary="10000" p:car-ref="car">
        <property name="hobbyList">
            <list>
                <value>游泳</value>
                <value>游泳</value>
                <value>跑步</value>
                <value>爬山</value>
            </list>
        </property>
        <property name="hobbySet">
            <set>
                <value>游泳</value>
                <value>游泳</value>
                <value>跑步</value>
                <value>爬山</value>
            </set>
        </property>
        <property name="trafficSpend">
            <map>
                <entry key="步行" value="60min"/>
                <entry key="开车" value="10min"/>
            </map>
        </property>
        <property name="carList">
            <list>
                <ref bean="car"/>
                <ref bean="car1"/>
                <ref bean="car2"/>
            </list>
        </property>
    </bean>
</beans>

2.2 Bean类型

通过bean标签的scope属性控制:

scope=“singleton”::单例
scope=“prototype”:原型
scope=“request”:HTTP请求,来一个请求创建一个Bean
scope=“session”:HTTP会话级别

2.3 依赖其他Bean的创建

如果当前Bean的创建以来其他Bean的创建,则可以在Bean标签中使用depends-on属性 注明。

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

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

相关文章

在 C#和ASP.NET Core中创建 gRPC 客户端和服务器

关于gRPC和Google protobuf gRPC 是一种可以跨语言运行的现代高性能远程过程调用 (RPC) 框架。gRPC 实际上已经成为 RPC 框架的行业标准&#xff0c;Google 内外的组织都在使用它来从微服务到计算的“最后一英里”&#xff08;移动、网络和物联网&#xff09;的强大用例。 gRP…

数据结构——二叉树——堆

前言&#xff1a; 在前面我们已经学习了数据结构的基础操作&#xff1a;顺序表和链表及其相关内容&#xff0c;今天我们来学一点有些难度的知识——数据结构中的二叉树&#xff0c;今天我们先来学习二叉树中堆的知识&#xff0c;这部分内容还是非常有意思的&#xff0c;下面我们…

重读 Java 设计模式: 深入探讨原型模式,灵活复制对象

引言 在软件开发中&#xff0c;经常会遇到需要创建对象的情况。有时候&#xff0c;我们希望创建一个新的对象&#xff0c;但又不想通过传统的构造方法来创建&#xff0c;而是希望通过复制一个现有对象的方式来创建新的对象。这时&#xff0c;原型模式就能派上用场了。原型模式…

【51单片机入门记录】A2普中开发板实验课例程

一、开发板原理图 二、例程 &#xff08;1&#xff09;呼吸灯 #include <STC89C5xRC.H> #include<intrins.h>unsigned int PWM_wanttime0; //想要多长时间改变的占空比一次 unsigned int Breath_wanttime0; //想要多长时间改变呼气或者吸气的值时间 unsigned …

Android Studio 新建aar包

有几个注意事项 第一是注意是选择Android library这个包注意moudle name不能包含apk这三个字符

动手学机器学习双线性模型+习题

在数学中&#xff0c;双线性的含义为&#xff0c;二元函数固定任意一个自变量时&#xff0c;函数关于另一个自变量线性 矩阵分解 设想有N个用户和M部电影&#xff0c;构建一个用户画像库&#xff0c;包含每个用户更偏好哪些类型的特征&#xff0c;以及偏好的程度。假设特征的个…

0.5米多光谱卫星影像在农业中进行地物非粮化、非农化监测

一、引言 随着科技的发展&#xff0c;卫星遥感技术已经成为了农业领域中重要的数据来源。其中&#xff0c;多光谱卫星影像以其独特的优势&#xff0c;在农业应用中发挥着越来越重要的作用。本文将重点探讨0.5米加2米多光谱卫星影像在农业中的应用。 二、多光谱卫星影像概述 多…

ESP8266 WiFi物联网智能插座—上位机软件实现

1、软件架构 上位机主要作为下位机数据上传服务端以及节点调试的控制端&#xff0c;可以等效认为是专属版本调试工具。针对智能插座协议&#xff0c;对于下位机进行可视化监测和管理。 软件技术架构如下&#xff0c;主要为针对 Windows 的PC 端应用程序&#xff0c;采用WPF以及…

Mock.js的基本使用

mock顾名思义&#xff0c;就是模拟的意思&#xff0c;它模拟什么呢&#xff1f;假设我们在开发的过程中&#xff0c;我们需要使用到接口&#xff0c;但是后端接口并没有完善&#xff0c;那么我们就可以使用到mock.js&#xff0c;它可以随机生成数据&#xff0c;拦截AJAX请求&am…

壁纸小程序Vue3(分类页面和用户页面基础布局)

1.配置tabBar pages.json "tabBar": {"color": "#9799a5","selectedColor": "#28B389","list": [{"text": "推荐","pagePath": "pages/index/index","iconPath&quo…

网络安全-内网渗透2

一、MIC 将我们上次未描述完的MIC在这里详细解释一下 咱们所抓的第二个包会给返回一个服务端的challenge 之后服务器回包的第三个包会回复一个client challenge 所以咱们客户端和服务端现在分别有两个challenge&#xff0c;相当于客户端和服务端互相交换了一下challenge 因此…

《深度学习入门之PyTorch》书籍阅读笔记

《深度学习入门之PyTorch》书籍阅读笔记 ISBN 978-7-121-32620-2 多层全连接神经网络 Pytorch基础 Tensor张量 是一个多维矩阵&#xff0c;pytorch的tensor可以和numpy的ndarray相互转换&#xff0c;但numpy的ndarray只能在CPU上运行。不同数据类型的Tensor&#xff0c;t…

nginx的https与动态负载均衡

nginx的https 证书可以根据你的域名和服务器服务商去进行签发 , 比如 : 阿里云 腾讯云 百度云 华为云等 这里使用的是腾讯云 : 下载证书 : 选择 nginx: 下载之后传递到服务器上。 下面开始配置nginx的https: 1. 解压下载的证书包 cd /etc/ssl unzip xxcc.dwa_nginx.zip mv…

JMeter基础用法和测试WebSocket请求

目录 JMeter websocket插件安装测试接口的编写添加测试线程组创建取样器创建WebSocket连接创建循环控制器创建WebSocket request-response Sampler创建固定定时器 正则匹配上一个请求的数据做为当前请求参数正则编写使用匹配值 CSV文件读取参数添加汇总报告和结果树 JMeter web…

zookeeper如何管理客户端与服务端之间的链接?(zookeeper sessions)

zookeeper客户端与服务端之间的链接用zookeeper session表示。 zookeeper session有三个状态&#xff1a; CONNECTING, ASSOCIATING, CONNECTED, CONNECTEDREADONLY, CLOSED, AUTH_FAILED, NOT_CONNECTED&#xff08;start时的状态&#xff09; 1、CONNECTING 。 表明客户…

vulhub中Apache Solr 远程命令执行漏洞复现(CVE-2017-12629)

Apache Solr 是一个开源的搜索服务器。Solr 使用 Java 语言开发&#xff0c;主要基于 HTTP 和 Apache Lucene 实现。原理大致是文档通过Http利用XML加到一个搜索集合中。查询该集合也是通过 http收到一个XML/JSON响应来实现。此次7.1.0之前版本总共爆出两个漏洞&#xff1a;[XM…

金三银四面试题(九):JVM常见面试题(3)

今天我们继续探讨常见的JVM面试题。这些问题不比之前的问题庞大&#xff0c;多用于面试中JVM部分的热身运动&#xff0c;开胃菜&#xff0c;但是大家已经要认真准备。 你能保证GC 执行吗&#xff1f; 不能&#xff0c;虽然你可以调用System.gc() 或者Runtime.gc()&#xff0c…

vue3+threejs新手从零开发卡牌游戏(二十四):添加p2战斗逻辑

用代码模拟p2战斗逻辑&#xff0c;按流程进行步骤拆分&#xff1a; 1.p2抽卡 2.p2召唤怪兽上场 3.p2战斗 其中战斗部分分为几种情况&#xff1a; 情况一&#xff1a;p2场上卡牌由大到小进行排序&#xff0c;按序轮询可以攻击的卡牌&#xff0c;然后攻击p1场上卡牌由大到小…

代码随想录阅读笔记-二叉树【完全二叉树节点个数】

题目 给出一个完全二叉树&#xff0c;求出该树的节点个数。 示例 1&#xff1a; 输入&#xff1a;root [1,2,3,4,5,6]输出&#xff1a;6 示例 2&#xff1a; 输入&#xff1a;root []输出&#xff1a;0 示例 3&#xff1a; 输入&#xff1a;root [1]输出&#xff1a;1 提示&…

玩转Django分页器

一、Pagination 分页器编程步骤 View, 导入django.core.paginator.Paginator类&#xff0c;创建Paginator 对象时&#xff0c;输入qs对象&#xff0c;以及每页显示条数。 接收 URL, 从请求参数中读取page数值 &#xff0c;通过 paginator.page(page_num) 返回请求页的page_obj…