JavaEE简单示例——Bean的实例化

news2024/11/26 1:30:46

简单介绍:

在我们之前使用某个对象,那么就要创建这个类的对象,创建对象的过程就叫做实例化。对于Spring来说,实例化Bean的方式有三种,分别是构造方法实例化,静态方法实例化,实例工厂实例化。我们会对每一种方法不同和代码实现做详细的解释。

使用方法:

构造方法实例化:

我们之前创建Bean对象的过程都是使用的构造方法,这个构造方法说的就是Bean的构造方法,现在我们继续打开我们之前的项目,我们对user对象做一点修改:

我们在无参的构造方法中添加一个输出语句,输出一句话即可,主要是为了观察如果这句话被输出了,那么就说明我们确实是通过构造方法的方式进行实例化对象。

 

我们看到确实是输出了我们想要的看到的一句话,那么就是证明了我们之前配置的过程就是试用了构造方法的方式创建的对象。 

静态方法实例化:

使用静态方法实例化的方式就是先创建一个静态工厂类,这个类中有一个方法,它的返回值是我们想要创建的对象,这个模式也就是典型的Java的工厂模式。然后我们配置的时候,我们需要配置的就不是我们的user类了,而是配置我们的工厂类,并且添加一个新的属性,这个属性用于指向我们工厂类中创建对象的方法,经过工厂类去创建我们的对象:

首先我们来创建静态工厂类:

package com.spring;

public class staticFactory {
    public static user userFactory(){
        System.out.println("使用静态方法的方式创建了user的对象");
        return new user();
    }
}

其实非常的简单,无非就是我们需要定义一个静态方法,然后方法的返回值是我们想要创建的对象,这里需要解释一下为什么是静态方法:

静态方法有一个特殊的性质,就是它可以不用创建方法,直接使用类名调用,这也就是他和实例工厂创建对象的最大的不同。

配置好了之后,我们来到我们的Bean管理XML配置文件中:

 注意红框中的代码,这时我们需要添加的代码,其中id是唯一标识,class指向工厂类的全路径,factory-method指向的就是我们创建对象的方法,这就是跟之前不一样的地方,然后我们就可以来到我们的测试类来修改我们的测试类:

 

可以看到,也输出了使用静态方法创建user对象的语句,为什么后面跟着又输出了使用构造方法进行实例化呢,因为我们在静态方法中创建对象使用了new关键字,而new关键字创建方法使用的还是构造方法的方式,当然创建对象可以不通过构造方法,但是因为这种方式最简单,有条件的可以尝试一下是用其他方式创建对象。 

实例工厂实例化:

实例工厂实例化其实就是将之前我们使用静态方法实例化中创建对象的方法的static关键字去掉,因为在有些时候我们创建类的方法无法写成一个静态方法,我们就可以使用实例工厂实例化的方式创建对象。我们类比静态方法的方式,实例工厂与他的区别就是将创建对象的方法中的static关键字去掉,在配置文件中,我们需要先创建工厂类的对象然后使用使用工厂类的对象去调用创建类的方法,所以我们要先编写工厂类的<bean>,然后在创建user对象的<bean>标签中,不使用class指向工厂类,而是使用一个新的属性叫做factory-bean来代替我们的class,factory-bean的值指向的是创建工厂类的<bean>标签的id属性的值,并且也同样添加一个属性factory-method指向创建对象的方法:

首先我们来创建这个工厂类:

我们在工厂类的创建对象的方法中输出一句话,如果这句话在我们创建对象的时候输出到了我们的控制台上,那么就说明我们的配置正确并且理论也是正确的。 

然后编写Bean管理XML配置文件:

 注意红色框里面的属性的值和上面创建工厂类的<bean>的id的值是一样的,这样就建立了两个bean之间的关系,就可以根据工厂类的对象去调用创建Bean的对象了,然后我们去测试类进行测试: 

运行结果:

可以看到,我们输出的结果和我们预想的是一样的,这也就证明了我们的理论是正确的,那么以上就是我们Bean实例化的三种方式的基本使用 

注意点:

之前我们创建的都是类的对象,但是如果我们现在有一个接口,没有实现类,比如之前我们学习过的,在MyBatis的接口话开发中,我们的mapper一直都是一个接口的形式,并没有实现的类,那么这时候我们该使用何种方式创建对象呢?

其实我们创建接口的对象,最简单的方式就是使用静态方法的方式,原理就是我们在静态方法中获取这个接口的动态代理对象,然后让方法去返回这个动态代理对象即可。

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

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

相关文章

哪款手推式洗地机好用?2023洗地机推荐

虽然现在市面上的洗地机层出不穷&#xff0c;但是无论洗地机怎么变&#xff0c;关于洗地机的选择看准吸力、除菌、续航、清洁力这几点就够了。因此&#xff0c;一款好用的洗地机必须要拥有良好的清洁力和续航时间&#xff0c;最好还拥有除菌等细节功能。那么下面就让我们一起来…

【Linux】文件系统详解

&#x1f60a;&#x1f60a;作者简介&#x1f60a;&#x1f60a; &#xff1a; 大家好&#xff0c;我是南瓜籽&#xff0c;一个在校大二学生&#xff0c;我将会持续分享C/C相关知识。 &#x1f389;&#x1f389;个人主页&#x1f389;&#x1f389; &#xff1a; 南瓜籽的主页…

Unity脚本复习

1.在Project面板中显示和创建的每一个脚本其实都是一个类&#xff0c;当我们把脚本挂载到Hierarchy层级中的游戏物体时&#xff0c;其实我们就实现了将脚本类实例化为一个脚本组件&#xff08;对象&#xff09;的过程 2.在游戏运行时&#xff0c;场景加载&#xff0c;游戏对象…

云边端协同时序数据库的挑战与解决方案

现今&#xff0c;时序数据库在经济金融、环境监控、医疗生物等多个领域有着极为广泛的需求。其中&#xff0c;在环境监控等领域&#xff0c;时序数据库主要部署在云边端架构中。但如何实现云边端协同是目前TSDB所面临的巨大挑战。由于云、边和端的计算、存储资源状况和对数据管…

【LeetCode】剑指 Offer(21)

目录 题目&#xff1a;剑指 Offer 39. 数组中出现次数超过一半的数字 - 力扣&#xff08;Leetcode&#xff09; 题目的接口&#xff1a; 解题思路&#xff1a; 代码&#xff1a; 过啦&#xff01;&#xff01;&#xff01; 题目&#xff1a;剑指 Offer 40. 最小的k个数 -…

论文阅读和分析:A Tree-Structured Decoder for Image-to-Markup Generation

目录1.主要内容&#xff1a;2.树解码器3、损失函数4、结论&#xff1a;参考&#xff1a;1.主要内容&#xff1a; &#xff08;1、提出创新的树结构解码器来表示树、输出树、优化基于注意力的编解码框架&#xff1b; &#xff08;2、设计一个问题说明特别是在复杂结构时字符解…

AidLux AI 应用案例悬赏征集活动正式启动!

ChatGPT爆火之后&#xff0c;AI领域的人才需求迎来了疯狂增长&#xff0c;AI学习也一跃成为业界大热门。 但AI囊括知识广、学习周期长&#xff0c;要克服理论、实战等多重阻碍并不容易。 而持续降低AI学习门槛是我们一直在做的事情。 为此&#xff0c;我们举办了多期AidLux …

R语言基础(五):流程控制语句

R语言基础(一)&#xff1a;注释、变量 R语言基础(二)&#xff1a;常用函数 R语言基础(三)&#xff1a;运算 R语言基础(四)&#xff1a;数据类型 6.流程控制语句 和大多数编程语言一样&#xff0c;R语言支持选择结构和循环结构。 6.1 选择语句 选择语句是当条件满足的时候才执行…

【麒麟服务器操作系统忘记开机密码怎么办?---银河麒麟服务器操作系统更改用户密码】

银河麒麟服务器操作系统更改用户密码 1.启动主机进入 grub 菜单&#xff0c;如图 1.1 以最新版本 Kylin-Server-10-SP2-x86-Release-Build09-20210524 为例。 图 1.1 grub 菜单 2 编辑 kernel 2.1按下”e”输入&#xff0c;输入用户名和密码&#xff08;root/Kylin123123&…

【数据结构初阶】由浅入深学习链表

目录 前言 链表的概念及结构 链表的分类 单链表的实现 接口实现 1.结构体 2.创建一个新结点 3.打印链表数据 4.尾插数据 5.尾删数据 6.头插数据 7.头删数据 8.任意位置删除 9.查找位置 10.pos之前插入 11.pos之后插入 12.释放内存 完整源码 总结 前言 在我们…

Java Web 实战 07 - 多线程基础之单例模式

大家好 , 这篇文章给大家带来的是单例模式 , 单例模式中分为懒汉模式和饿汉模式 , 懒汉模式是需要用的到的时候才去创建实例 , 而饿汉模式是程序一启动就立刻创建实例 , 在这其中还有很多其他问题需要我们去研究 推荐大家跳转到这里 , 观看效果更加 上一篇文章的链接我也贴在这…

1641_strchr函数的功能分析以及peek功能实现分析

全部学习汇总&#xff1a; GreyZhang/g_unix: some basic learning about unix operating system. (github.com) 继续分析shell例程代码&#xff0c;再次遇到了一个陌生的库函数strchr。 1. 从这里看&#xff0c;这个是一个库函数无疑了。 2. 这个函数&#xff0c;或者说这三个…

2个步骤就能批量给视频添加滚动字幕

现在很多小伙伴在剪辑视频的时候都会给自己的视频添加适配的字幕&#xff0c;但是有很多的视频想要添加一样的滚动字幕时&#xff0c;有一个能批量添加剪辑的工具非常重要&#xff0c;今天小编就给大家分享一个可以批量剪辑大量视频的工具&#xff0c;下面一起看看具体的操作步…

超导百年:物理学“圣杯”是如何诞生的?

最近科技圈流传的大新闻&#xff0c;大家都知道了吧&#xff1f;简单来说&#xff0c;美国物理学会的三月会议上&#xff0c;来自罗彻斯特大学的Ranga Dias宣布&#xff0c;他们团队在近环境压强下实现了室温超导。这个消息在中文互联网流传之后&#xff0c;很快就有了详细的解…

刷题(第三周)

目录 [CISCN2021 Quals]upload [羊城杯 2020]EasySer [网鼎杯 2020 青龙组]notes [SWPU2019]Web4 [Black Watch 入群题]Web [HFCTF2020]BabyUpload [CISCN2021 Quals]upload 打开界面以后&#xff0c;发现直接给出了源码 <?php if (!isset($_GET["ctf"]))…

网络工程师面试题(面试必看)(3)

作者简介:一名云计算网络运维人员、每天分享网络与运维的技术与干货。 座右铭:低头赶路,敬事如仪 个人主页:网络豆的主页​​​​​​ 前言 本系列将会提供网络工程师面试题,由多位专家整合出本系列面试题,包含上百家面试时的问题。面试必考率达到80%,本系列共86道题…

银行管理系统--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

实例1&#xff1a;银行管理系统 从早期的钱庄到现如今的银行&#xff0c;金融行业在不断地变革&#xff1b;随着科技的发展、计算机的普及&#xff0c;计算机技术在金融行业得到了广泛的应用。银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列的功…

一文分析Linux v4l2框架

说明&#xff1a; Kernel版本&#xff1a;4.14 ARM64处理器&#xff0c;Contex-A53&#xff0c;双核 使用工具&#xff1a;Source Insight 3.5&#xff0c; Visio 1. 概述 V4L2(Video for Linux 2)&#xff1a;Linux内核中关于视频设备驱动的框架&#xff0c;对上向应用层提供…

Transformer-XL:打破序列长度限制的Transformer模型

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️&#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

Redis经典五种数据类型底层实现原理解析

目录总纲redis的k,v键值对新的三大类型五种经典数据类型redisObject结构图示结构讲解数据类型与数据结构关系图示string数据类型三大编码格式SDS详解代码结构为什么要重新设计源码解析三大编码格式hash数据类型ziplist和hashtable编码格式ziplist详解结构剖析ziplist的优势(为什…