springBean的三种实例化

spring容器创建javaBean的实例,有三种方式。 分别是通过构造方法、 静态工程方法、 实例工厂方法。

前言:

1.构造方法实例化方式:

我的理解: 通过bean标签结合property调用set方法;通过bean标签结合constructor-arg调用构造方法;通过@Componen、@Repository、@Service、@Controller注解; 都属于调用构造方法对对象进行实例化。 因为如果调用bean标签结合property调用set方法而不提供无参构造方法就会报错。 而通过注解方式创建bean对象,不提供无参构造方法就会因为无法给有参构造方法的参数传入值而报错。

2.静态工厂实例化:

从spring容器中获取静态工厂时, spring会自动执行静态工厂的静态方法来返回另一个bean对象。

效果:用getBean获取静态工厂时,返回的是另一个bean对象

代码关键点:

  • 需要被实例化的java类、

  • 静态工厂类和静态方法(方法内返回需要被实例化的java类的对象)、

  • 用bean标签配置需要被实例化的类、 用bean标签配置静态工厂类,用另一个bean标签配置factory-method指定静态工厂方法、并用factory-bean指定静态工厂类的beanId。

注: 最终当要用 需要被实例化的java类对象时, 只需要获取指定factory-method的bean对象即可(会返回需要被实例化的java类的对象)

3.实例工厂实例化:

从spring容器中获取配置了factory-method的bean对象时, spring会自动执行实例工厂的创建对象的方法来返回另一个bean对象。

效果:用getBean获取配置了factory-method的bean对象时,返回的是另一个bean对象

代码关键点:

  • 需要被实例化的java类、

  • 实例工厂类和创建对象的方法(方法内返回需要被实例化的java类的对象)、

  • 用bean标签配置需要被实例化的类、 用bean标签配置实例工厂类并用factory-method指定实例工厂方法。

注: 最终当要用 需要被实例化的java类对象时, 只需要获取实例工厂类的bean对象即可(会返回需要被实例化的java类的对象)

这里演示后两种: 静态工厂实例化、 实例工程实例化

一、静态工厂实例化:

  • 需要被实例化的java类、

  • 静态工厂类和静态方法(方法内返回需要被实例化的java类的对象)、

  • 用bean标签配置需要被实例化的类、 用bean标签配置静态工厂类,用另一个bean标签配置factory-method指定静态工厂方法、并用factory-bean指定静态工厂类的beanId。

    注: 最终当要用 需要被实例化的java类对象时, 只需要获取指定factory-method的bean对象即可(会返回需要被实例化的java类的对象)

1.1.需要被实例化的java类Student:
package staticFactory;
public class Student {private String stuName,stuPwd;public Student() {  }public Student(String stuName, String stuPwd) {this.stuPwd = stuPwd;this.stuName = stuName;}public String getStuName() {return stuName;}public void setStuName(String stuName) {this.stuName = stuName;}public String getStuPwd() {return stuPwd;}public void setStuPwd(String stuPwd) {this.stuPwd = stuPwd;}public String toString() {return String.format("学生姓名:%s,学生密码:%s",stuName,stuPwd);}
}

1.2.静态工厂类:
package staticFactory;
​
public class StudentServiceFactory {private static Student student;public static Student createStudentServiceBean(){student=new Student();return  student;}
}

1.3.applicationContext.xml配置静态工厂:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""><!--  静态工厂方式:  --><bean id="stuFactory1" class="staticFactory.StudentServiceFactory" factory-method="createStudentServiceBean"><constructor-arg name="userName" value="张三"> </constructor-arg><constructor-arg name="userPwd" value="123"> </constructor-arg></bean>
</beans>

1.4.Test测试类:
package staticFactory;
​
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
​
public class Test {
public static void main(String[] args) {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");Student stu = (Student) applicationContext.getBean("stuFactory1");System.out.println( "stu学生对象的信息: " + stu.toString());}
}

二、实例工厂方式案例:

  • 需要被实例化的java类、

  • 实例工厂类和创建对象的方法(方法内返回需要被实例化的java类的对象)、

  • 用bean标签配置需要被实例化的类、 用bean标签配置实例工厂类并用factory-method指定实例工厂方法。

    注: 最终当要用 需要被实例化的java类对象时, 只需要获取实例工厂类的bean对象即可(会返回需要被实例化的java类的对象)

2.1.需要被实例化的java类Student:

package noStaticFactory;
​
public class Student {private String stuName,stuPwd;public Student() {  }public Student(String stuName, String stuPwd) {this.stuPwd = stuPwd;this.stuName = stuName;}public String getStuName() {return stuName;}public void setStuName(String stuName) {this.stuName = stuName;}public String getStuPwd() {return stuPwd;}public void setStuPwd(String stuPwd) {this.stuPwd = stuPwd;}public String toString() {return String.format("学生姓名:%s,学生密码:%s",stuName,stuPwd);}
}
2.2.实例工厂类:
package noStaticFactory;
​
public class StudentServiceFactory {private  Student student;public Student createStudentServiceBean(String userName,String userPwd){this.student=new Student(userName,userPwd);return  student;}
}
​
2.3.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="studentServiceFactory" class="noStaticFactory.StudentServiceFactory"></bean><bean id="stuFactory2"  factory-bean="studentServiceFactory" factory-method="createStudentServiceBean"><constructor-arg name="userName" value="张三"> </constructor-arg><constructor-arg name="userPwd" value="123"> </constructor-arg></bean>
​
</beans>
2.4.Test测试类:
package noStaticFactory;
​
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import staticFactory.Student;
​
public class Test {public static void main(String[] args) {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");staticFactory.Student stu = (Student) applicationContext.getBean("stuFactory2");System.out.println( "stu学生对象的信息: " + stu.toString());}
}

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

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

相关文章

yolov5模型压缩-torch_pruning

参考论文:DepGraph: Towards Any Structural Pruning(https://arxiv.org/abs/2301.12900) 主要原理:物理的移除参数,并自动找出层与层以及层之间的依赖,完成模型的自动裁剪 模型压缩效果:yolov5剪枝流程如下: pip install torch_pruning 新建prune.py: import torch_…

Java项目:50 ssm010基于ssm的新能源汽车在线租赁管理系统+vue

作者主页&#xff1a;舒克日记 简介&#xff1a;Java领域优质创作者、Java项目、学习资料、技术互助 文中获取源码 项目介绍 管理员&#xff1b;首页、个人中心、用户管理&#xff0c;站点管理员管理、汽车信息管理&#xff0c;借车信息管理&#xff0c;我的收藏管理、系统管理…

走进网络世界 了解一些基础知识

走进网络 1.认识计算机 1.计算机网络是由计算机和通讯构成的&#xff0c;网络研究的是“通信”。 ------1946 世界上第一台计算机 2.终端&#xff1a;只有输入和输出功能&#xff0c;没有计算和处理功能。3.数据&#xff1a;一串数字&#xff08;二进制数&#xff09;&#x…

cesiumlab中shp转3dtiles白模效果一

安装cesiumlab 如果没有安装cesiumlab&#xff0c;去官网下载安装一个即可 http://www.cesiumlab.com/cesiumlab.html 效果 步骤 1、准备shp面数据 2、打开cesiumlab软件转换 选择shp面数据 设置高度&#xff0c;如果shp面中有高度字段&#xff0c;可以用高度字段&#xff…

基于Springboot的集团门户网站(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的集团门户网站&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&…

(C语言)球球大作战

前言&#xff1a; 这款简易版的球球大作战是一款单人游戏&#xff0c;玩家需要控制一个小球在地图上移动&#xff0c;吞噬其他小球来增大自己的体积。本游戏使用C语言和easyx图形库编写&#xff0c;旨在帮助初学者了解游戏开发的基本概念和技巧。 在开始编写代码之前&#xf…

基于FPGA的图像锐化算法(USM)设计

免费获取源码请关注微信号《FPGA学习笔记册》&#xff01; 1.图像锐化算法说明 图像锐化算法在实际的图像处理应用很广泛&#xff0c;例如&#xff1a;医学成像、工业检测和军事领域等&#xff1b;它的作用就是将模糊的图像变的更加清晰。常用的图像锐化算法有拉普拉斯算子、s…

算法--每日一练

1.数字A除本身以外的因数之和为数字B&#xff0c;B除本身之外的因数之和为A&#xff0c;这样的数对称为相亲数&#xff0c;例如&#xff1a;220的真因数之和为1245101120224455110284&#xff0c;284的真因数之和为 12471142220&#xff0c;请找出2到10000之间所有的相亲数。 …

C#面:简单介绍枚举

枚举&#xff08;Enumeration&#xff09; 枚举类型 是由基础整型数值类型的一组命名常量定义的值类型。&#xff08;这个拗口的表述来自官方文档&#xff09; 翻译成人话&#xff1a; 枚举是值类型。枚举的成员是常量默认情况下&#xff0c;枚举成员的关联常数值为类型 int…

linux上MySQL的安装

(1)解压安装包 tar -xzvf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.33-linux-glibc2.12-x86_64 /usr/local/mysql(2)创建数据目录 [roothecs-161929 3306]# mkdir -p /data/mysql/3306/data [roothecs-161929 3306]# mkdir -p /data/mysql/3306/binlog [roo…

react框架中无构建模式直接使用es6组件

react框架&#xff0c;看到的总是使用es5&#xff0c;通过webpack编译构建。react官方&#xff0c;直到现在的v18.1.0版本中&#xff0c;只有cjs和umd版本&#xff0c;都没有esm&#xff08;es6&#xff09;版本&#xff0c;看起来是对es6的不认可&#xff1f; 但是&#xff0…

科研学习|论文解读——一种修正评分偏差并精细聚类中心的协同过滤推荐算法

知网链接 一种修正评分偏差并精细聚类中心的协同过滤推荐算法 - 中国知网 (cnki.net) 摘要 协同过滤作为国内外学者普遍关注的推荐算法之一&#xff0c;受评分失真和数据稀疏等问题影响&#xff0c;算法推荐效果不尽如人意。为解决上述问题&#xff0c;本文提出了一种改进的聚类…

centos 7.x 上安装 AI insightface + pytorch + cuda

centos 英伟达检查工具 lsb_release -a nvidia-smi lspci | grep -i nvidia CUDA v11.7 安装 首先在centos机器上必须先安装英伟达驱动&#xff0c;参考下面的文档 https://docs.nvidia.com/cuda/cuda-installation-guide-linux/index.html# https://developer.nvidia.com/c…

Docker单机下的容器网络管理

Docker容器网络管理 容器网络类型 Docker安装以后&#xff0c;会在我们的主机上创建三个网络 docker network ls可以看到有bridge、host和none三种网络类型 我们先把ubuntu的网络环境配置一下 docker run -it ubuntu apt update apt install net-tools iputils-ping curl这…

HTML静态网页成品作业(HTML+CSS)——家乡广州介绍设计制作(5个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有5个页面。 二、作品演示 三、代…

Android Bundle putBinder传输超过1MB数据,Kotlin

Android Bundle putBinder传输超过1MB数据&#xff0c;Kotlin 由于Android系统架构的设计&#xff0c;Activity/Fragment之间通过Intent在Bundle塞进数据进行传输时候&#xff0c;如果数据超过1MB&#xff0c;会抛JE&#xff1a; java.lang.RuntimeException: android.os.Tran…

浏览器预览word

浏览器打开word是直接下载&#xff0c;而打开pdf才是预览。所以需要先将word转为pdf&#xff0c;visual basic将word转pdf的代码&#xff1a; Sub word2pdf()ActiveDocument.ExportAsFixedFormat OutputFileName:"C:\Users\zhour\Documents\contact.pdf", ExportFor…

proto的singular解释

在计算机科学和特别是在协议缓冲区&#xff08;Protocol Buffers&#xff0c;简称Proto&#xff09;的上下文中&#xff0c;“singular”这个词具有特定的含义。Protocol Buffers是Google开发的一种语言中立、平台中立、可扩展的序列化结构数据的方法&#xff0c;广泛用于通信协…

大型语言模型RAG(检索增强生成):检索技术的应用与挑战

摘要 检索增强生成&#xff08;RAG&#xff09;系统通过结合传统的语言模型生成能力和结构化数据检索&#xff0c;为复杂的问题提供精确的答案。本文深入探讨了RAG系统中检索技术的工作原理、实现方式以及面临的挑战&#xff0c;并对未来的发展方向提出了展望。 随着大型预训…

IDEA中配置完Maven后 重启就恢复默认设置

目录 问题描述解决方案-修改other settingsother settings改完也不奏效参考这里 问题描述 在IDEA的settings里配置完Maven之后 每次重启或新建一个项目/窗口之后 又恢复成之前的默认配置 解决方案-修改other settings 这和IDEA的版本有关 目前我使用的版本(2020.3.4) 配置完重…