[spring]实例化对象(静动态工厂)

news2024/12/20 7:06:15

    在前面文章的例子当中,我们都创建了Bean对象。spring里常用的获取类的实例化对象有几种方式:构造函数获取Bean对象、静态和动态工厂获取Bean对象、实现FactoryBean规范。

    因为一些步骤没有什么别的不同,所以我不会重复去讲,届时会简单略过,如果有什么疑问可以先去看我之前的文章:使用spring

构造函数获取Bean对象

    使用构造函数又分有参构造函数和无参构造函数。当然不是让你自己直接以new的方式获取实例对象。下面讲解详细步骤。

    同样的,我们要有一个实体类,这里我创建一个User类,为了方便,我还添加了有参构造函数和两个属性跟对应的setter方法。该标题下的内容后续都使用给该User类来进行讲解。

使用无参构造函数

    使用无参构造方法非常简单。我们直接在Bean的xml配置文件里面给该类配上<bean>即可,而且只需要配置class属性就可以了,不过为了方便,还是添加一个标识名user:

     然后就可以直接编写测试类来获取了。

 使用有参构造函数

    与使用无参构造方法类似,但多几步

    我们要在<bean>标签下使用二级标签<constructor-arg>来进行配置。

    

    该标签用于指定创建Bean对象的参数,然后调用对应的有参构造方法。它主要有这几个属性:

name:用来指定参数名字,该参数名与构造函数里面的参数名一致

value/ref:用来输入值的数据,两者区别与property中的 value/ref 一致

type:当使用value时,可以使用该属性声明你所输入的值的类型。该属性是否使用主要看版本

    不管我们输入的是什么也好,value值我们给的值原本都是是String类型,然后会自动转换我们所需要的数据类型。但在高版本的spring中,撤掉了自动类型转换,需要我们使用type声明我们输入的数据属于什么类型。

index:设置该参数位于传递的参数列表中的第几个。该属性和name只需要使用其中之一即可,都是用来设置传递的参数所构成的参数列表的。

    当有多个参数的时候,便在<bean>下面创建多个<constructor-arg>传递多个参数值即可。注意,你所传递的参数所构成的参数列表必须与某个构造函数的参数列表一致

工厂方式实例化对象

    工厂方式实例化对象又分两个,分别是静态工厂和实例工厂。这里需要讲一下工厂的概念。

    在早期的MVC三层架构开发时,经常会出现在业务逻辑的代码中能看到很多的手动new对象的代码的情况(这种情况在校学习期间我们自己编写的小项目就经常出现这种情况)。这样会造成高度耦合,不利于日后的代码维护等一系列工作。光说有点抽象,我们放图片示例:

    层与层之间涉及到方法的调用的时候,我们总是要手动的去创建对象,才能去调用其他层的方法。

    这个时候我们就可以使用设计模式中的工厂模式来解决问题。 这里了解即可,不展开详细讲。

静态工厂

    在spring里面,静态工厂的实现方式是实现一个静态工厂类。通过<bean>的属性factory-method,来指定一个静态方法,在该静态方法中达到创建对象的目标并返回交给spring容器管理。

    这里我们编写一个静态工厂类,让其可以生成User类的实例对象:

    然后我们在Bean的配置文件里面给工厂类配置Bean属性: 

    测试结果:

    如果一个工厂类里有多个生产方法,创建多个<bean>标签一一配置即可。只需要彼此之间配置不同标识名即可。 

实例工厂 

     静态工厂需要我们先编写一个实例工厂类,然后在Bean的xml配置文件中给其配置<bean>,这个<bean>后面需要作为factory-bean来使用。

    然后我们配置Bean的xml配置文件,先给我们编写的实例工厂类配置一个bean,然后再编写一个bean,class正常选择我们的User类,但是需要设置factory-bean,表示从该工厂里面获得User类的实例,然后factory-method选择我们工厂里的生产方法: 

    测试结果:

实现FactoryBean规范

    除了直接使用spring的容器的方式来实现工厂之外,我们还可以自己编写工厂类,使其实现FactoryBean接口的方式来实现工厂类,注意不是BeanFactory。

    我们编写代码:

    配置Bean的XML文件:

     编写测试类:

    测试结果:

 

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

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

相关文章

三、ubuntu18.04安装docker

1.使用默认ubuntu存储库安装docker 更新软件存储库 更新本地软件数据库确保可以访问最新版本。打开终端输入&#xff1a;sudo apt-get update 卸载旧版本的docker 建议继续之前卸载任何旧的docker软件。打开终端输入&#xff1a;sudo apt-get remove docker docker-engine …

Java JDK8之前传统的日期时间-Date、SimpleDateFormat、Calendar

1. Date (1) Date代表的是日期和时间 (2) 常见构造器和常用方法 构造器说明public Date()创建一个Date对象&#xff0c;代表系统当前日期和时间public Date(long time)根据传入的时间毫秒值创建一个Date对象 方法说明public long getTime()返回从1970.1.1 00:00:00到此时的毫…

Android简洁缩放Matrix实现图像马赛克,Kotlin

Android简洁缩放Matrix实现图像马赛克&#xff0c;Kotlin 原理&#xff0c;通过Matrix把一个原图缩小到原先的1/n&#xff0c;然后再把缩小后的小图放大n倍&#xff0c;自然就是马赛克效果&#xff08;相当于是放大后像素“糊”成一片了&#xff09;。 import android.content.…

Luma 视频生成 API 对接说明

随着 AI 的应用变广&#xff0c;各类 AI 程序已逐渐普及。AI 已逐渐深入到人们的工作生活方方面面。而 AI 涉及的行业也越来越多&#xff0c;从最初的写作&#xff0c;到医疗教育&#xff0c;再到现在的视频。 Luma 是一个专业高质量的视频生成平台&#xff0c;用户只需上传素…

解锁移动设备管理新技能-RayLink远程控制手机

在这个忙碌的现代社会中&#xff0c;智能手机已经成为我们生活的重要组成部分&#xff0c;它们不再仅仅是通讯工具&#xff0c;而是我们日常生活的核心。随着这种变化&#xff0c;远程控制手机的技术应运而生&#xff0c;为我们开启了一个全新的移动设备管理时代。今天&#xf…

<论文>初代GPT长什么样?

一、摘要 今天我们聊一下论文《Improving Language Understanding by Generative Pre-Training》以及它所提出来的预训练模型——GPT1。我们知道Bert在出道那会儿红极一时&#xff0c;但实际上GPT1比Bert还要早几个月就出道了&#xff0c;而且同样刷新了当时的多个任务记录。GP…

flutter 快速实现侧边栏

首先我们写一个侧边栏工具类&#xff0c;示例如下&#xff1a; import package:flutter/material.dart;class Sidebar extends StatelessWidget {overrideWidget build(BuildContext context) {return Drawer(child: ListView(padding: EdgeInsets.zero,children: <Widget&…

Odoo:免费开源ERP的AI技术赋能出海企业电子商务应用介绍

概述 伴随电子商务的持续演进&#xff0c;客户对于便利性、速度以及个性化服务的期许急剧攀升。企业务必要探寻创新之途径&#xff0c;以强化自身运营&#xff0c;并优化购物体验。达成此目标的最为行之有效的方式之一&#xff0c;便是将 AI 呼叫助手融入您的电子商务平台。我们…

[SZ901]FPGA程序固化工具使用方法

工具为脚本形式&#xff0c;前期需进行vivado版本&#xff0c;下载器端口配置 1&#xff0c;编辑 【SZ901程序固化工具.bat】&#xff0c;设置软件版本 修改软件版本和安装路径 2&#xff0c;设置下载器端口&#xff08;SZ901->USER_TCL->FlashBurn_Config.tcl&#x…

详解Redis的String类型及相关命令

目录 SET GET MGET MSET SETNX SET和SETNX和SETXX对比 INCR INCRBY DECR DECRBY INCRBYFLOAT APPEND GETRANGE SETRANGE STRLEN 内部编码 SET 将 string 类型的 value 设置到 key 中。如果 key 之前存在&#xff0c;则覆盖&#xff0c;⽆论原来的数据类型是什么…

【时间之外】IT人求职和创业应知【71】-专利费

目录 2025 ICT产业趋势年会召开&#xff0c;2024年度ICT十大新闻重磅揭晓 海纳致远数字科技申请定制化插件驱动的数据分析专利 阿波罗智联取得语音数据的处理方法、装置、设备和存储介质专利 心勿贪&#xff0c;贵知足。 感谢所有打开这个页面的朋友。人生不如意&#xff0…

生态学研究中,森林生态系统的结构、功能与稳定性是核心研究

在生态学研究中&#xff0c;森林生态系统的结构、功能与稳定性是核心研究内容之一。这些方面不仅关系到森林动态变化和物种多样性&#xff0c;还直接影响森林提供的生态服务功能及其应对环境变化的能力。森林生态系统的结构主要包括物种组成、树种多样性、树木的空间分布与密度…

MySQL追梦旅途之慢查询分析建议

一、找到慢查询 查询是否开启慢查询记录 show variables like "%slow%";log_slow_admin_statements&#xff1a; 决定是否将慢管理语句&#xff08;如 ALTER TABLE 等&#xff09;记录到慢查询日志中。 log_slow_extra &#xff1a; MySQL 和 MariaDB 中的一个系…

“AI应急管理系统:未来城市安全的守护者

大家好&#xff0c;今天我想和大家聊聊一个特别酷的话题——AI应急管理系统。想象一下&#xff0c;当城市遇到突发事件&#xff0c;比如火灾、洪水或者地震&#xff0c;我们能有一个智能系统迅速响应&#xff0c;那该多好啊&#xff01;这就是AI应急管理系统的魅力所在。 首先&…

12.9深度学习_经典神经网络_MobileNet V1V2

一、MobileNet V1 1. 铭记历史 传统的卷积神经网络参数量大&#xff0c;导致预测时算力大&#xff0c;对于手机、嵌入式等设备来讲是不行的&#xff0c;例如VGG16大概有490M&#xff0c;ResNet的152层模型有644M&#xff0c;这种是不能在移动端部署的时候不但慢还暂用空间&am…

Apache Tomcat RCE 稳定复现 保姆级!(CVE-2024-50379)附视频+POC

原文链接 Apache Tomcat 最新RCE 稳定复现分析 保姆级&#xff01;&#xff01;&#xff01;附复现视频POC 前言 最近爆出 Apache Tomcat条件竞争导致的RCE&#xff0c;影响范围当然是巨大的&#xff0c;公司也及时收到了相关情报&#xff0c;于是老大让我复现&#xff0c;以…

二、Jmeter Web压测

Jmeter Web压测 一、JMeter简介二、安装JMeter三、使用JMeter进行Web压测的基本步骤 &#xff08;一&#xff09;创建测试计划&#xff08;二&#xff09;添加HTTP请求&#xff08;三&#xff09;添加监听器&#xff08;四&#xff09;运行测试 四、高级应用 &#xff08;一&am…

【Python爬虫系列】_032.Scrapy_全站爬取

课 程 推 荐我 的 个 人 主 页:👉👉 失心疯的个人主页 👈👈入 门 教 程 推 荐 :👉👉 Python零基础入门教程合集 👈👈虚 拟 环 境 搭 建 :👉👉 Python项目虚拟环境(超详细讲解) 👈👈PyQt5 系 列 教 程:👉👉 Python GUI(PyQt5)教程合集 👈👈

[LeetCode-Python版] 定长滑动窗口——灵神思路(1)

思路 把问题拆解成三步&#xff1a;入-更新-出。 入&#xff1a;下标为 i 的元素进入窗口&#xff0c;更新相关统计量。如果 i<k−1 则重复第一步。更新&#xff1a;更新答案。一般是更新最大值/最小值。出&#xff1a;下标为 i−(k-1) 的元素离开窗口&#xff0c;更新相关…

紧固件设计之——开槽长圆柱端紧定螺钉结构仿真APP

按照产品形态分类&#xff0c;紧固件通常包括以下12类&#xff1a;螺栓、螺柱、螺钉、螺母、自攻螺钉、木螺钉、垫圈、挡圈、销、铆钉、焊钉、组合件与连接副&#xff0c;是一类用于连接和固定各种构件和零部件的重要机械零件&#xff0c;可确保机械装置或设备结构的牢固和稳定…