Spring中的Bean的实例化

news2025/1/14 0:55:26

Bean的实例化

      • 1. Bean的配置
      • 2.Bean的实例化
        • 2.1 构造器实例化
        • 2.2 静态工厂方式实例化
        • 2.3 实例工厂方式实例化

1. Bean的配置

Spring 可以被看作是一个大型工厂,这个工厂的作用就是生产和管理 Spring 容器中的Bean。如果想要在项目中使用这个工厂,就需要开发者对Spring 的配置文件进行配置。
Spring 容器支持XML 和 Properties 两种格式的配置文件,在实际开发中,最常使用的就是 对应XML 格式的配置方式。这种配置方式通过XML 文件来注册并管理Bean 之间的依赖关系。接下来本小节将使用XML 文件的形式对Bean的属性和定义进行详细的讲解。
在Spring 中,XML 配置文件的根元素是,中包含了多个子元素,每一个子元素定义了一个Bean,并描述了该Bean 如何被装配到 Spring 容器中。元素中同样包含了多个属性以及子元素,其常用属性及子元素如表所示。

在这里插入图片描述

在实际配置中,通常一个普通的Bean只需要定义id和class两个属性即可
在这里插入图片描述

<?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:配置一个bean对象,将对象交给IOC容器管理
        属性:
        id:bean的唯一标识,不能重复
        class:设置bean对象所对应的类型
    -->
    <bean id="bean1" class="com.atguigu.spring.Bean1"/>
    <bean id="bean2" class="com.atguigu.spring.Bean2"/>
</beans>

如果在Bean中未指定id和name,则Spring会将class当作id来使用

2.Bean的实例化

实例化Bean通常有三种方式,分别为构造器实例化,静态工厂实例化和实例工厂实例化

2.1 构造器实例化

构造器实例化是指Spring容器通过Bean对应类中默认的无参构造方法来实例化Bean。

实体类(Bean)

package com.atguigu.spring.pojo;


public class HelloWorld {

    public void sayHello(){
        System.out.println("hello,spring");
    }

}

对应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:配置一个bean对象,将对象交给IOC容器管理
        属性:
        id:bean的唯一标识,不能重复
        class:设置bean对象所对应的类型
    -->
    <bean id="helloworld" class="com.atguigu.spring.pojo.HelloWorld"></bean>

</beans>

实际调用

@Test
public void test(){
    //获取IOC容器
    ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
    //获取IOC容器中的bean
    HelloWorld helloworld = (HelloWorld) ioc.getBean("helloworld");
    helloworld.sayHello();
}

2.2 静态工厂方式实例化

使用静态工厂是实例化Bean的另一种方式,该方式要求开发者创建一个静态工厂的方法来创建Bean的实例,注意其配置中的class不再是Bean实例的实现类,而是静态工厂类

实体类

public class UserFactoryBean implements FactoryBean<User> {
    @Override
    public User getObject() throws Exception {
        return new User();
    }

    @Override
    public Class<?> getObjectType() {
        return User.class;
    }
    ApplicationContext applicationContext = new FileSystemXmlApplicationContext(String config)
}

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 class="com.atguigu.spring.factory.UserFactoryBean"></bean>

</beans>

测试方法

@Test
public void testFactoryBean(){
    ApplicationContext ioc = new ClassPathXmlApplicationContext("spring-factory.xml");
    User user = ioc.getBean(User.class);
    System.out.println(user);
}

2.3 实例工厂方式实例化

该方式与静态工厂方式类似,区别在于不再使用静态方法创建Bean实例,而是采用直接创建的方式,这里不再举例。

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

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

相关文章

Android开发【全面理解Activity】

一、 Activity的生命周期 和其他手机 平台 的应用 程序 一样&#xff0c;Android的应用程序 的生命周期是被统一掌控 的&#xff0c;也就是说我们写的应用程序命运掌握在别人&#xff08;系统&#xff09;的手里&#xff0c;我们不能改变它&#xff0c;只能学习并适应它。 简…

一年一度的云计算春晚——亚马逊云科技re:Invent

一年一度的云计算春晚——亚马逊云科技re:Invent&#xff0c;近日盛大开幕。那么“云计算春晚”发布了什么AI产品&#xff1f; 首先来看Amazon SageMaker&#xff0c;今年是其发布的第五年&#xff0c;各行各业已有数百万个机器学习模型使用该服务管理&#xff0c;每月进行数千…

支付服务-----功能实现逻辑

支付服务实现逻辑 简单概况一下支付服务的实现逻辑 通过支付宝的沙箱环境来模拟支付功能&#xff0c;用户点击支付宝的链接后给后端发/aliPayOrder请求&#xff0c;封装支付宝需要payVo对象&#xff0c;并且调用 String pay alipayTemplate.pay(payVo)和 return pay&#xf…

A-LEVEL经济例题解析及练习Economic Question

每日一练 例题 Question: Consumer surplusA. Find Marginal Buyer’s WTP (Willingness to Pay) at Q10. B. Find Consumer Surplus for P30. Suppose P falls to $20. How much will Consumer Surplus increase due to: C. buyers entering the market D. existing buyers pa…

mysql8安装过程

1下载地址 https://downloads.mysql.com/archives/community/ 根据自己电脑系统环境选择操作系统和版本&#xff0c;本人选择下载的是windows 64位&#xff0c; 2.创建并编写my.ini文件 创建一个文本文档将文件名改为my后缀为ini my.ini配置其中basedir跟datadir自行根据加…

发布了二十年的《敏捷宣言》是否依然适用?

敏捷宣言已经诞生二十年&#xff0c;这份简短却“颠覆”规则的文件&#xff0c;帮助我们将产品开发交付的方式&#xff0c;从长途运输变成了“次日达”一样的存在。当下的我们正处在一个持续创新的世界&#xff0c;面对技术变革洪流&#xff0c;有时候我们可能会产生思考&#…

day42 文件包含LFIRFI伪协议编码算法代码审计

前言&#xff1a; #知识点&#xff1a; 1、解释-什么是文件包含 2、分类-本地LFI&远程RFI 3、利用-配合上传&日志&会话 4、利用-伪协议&编码&算法等 #核心知识&#xff1a; 1、本地包含LFI&远程包含RFI-区别 一个只能包含本地&#xff0c;一个可…

操作系统例题合集(持续更新)

传送门 由于操作系统知识太多&#xff0c;再加上我总结的比较细&#xff0c;所以一片放不下&#xff0c;拆分成了多篇文章。 操作系统笔记——概述、进程、并发控制 操作系统笔记——储存器管理、文件系统、设备管理 操作系统笔记——Linux系统实例分析、Windows系统实例分析 …

模拟和矢量信号源进阶使用技巧

前言 通常射频信号源的简单应用通常只是输入频率、功率&#xff0c;加上一些模拟、数字调制&#xff0c;然而要充分挖掘出信号源的潜力和性能需要更多的技巧。本应用指南会告诉您可以通过更多的方式提高射频信号源输出信号的质量&#xff0c;具体内容包括&#xff1a; 1. 提高…

【LeetCode_字符串_逻辑分析】6. Z 字形变换

目录考察点第一次&#xff1a;2022年12月9日10:58:17解题思路代码展示题目描述6. Z 字形变换 将一个给定字符串 s 根据给定的行数 numRows &#xff0c;以从上往下、从左到右进行 Z 字形排列。 比如输入字符串为 “PAYPALISHIRING” 行数为 3 时&#xff0c;排列如下&#xf…

DAP组件外部服务开发说明

DAP数据分析平台主要是为了满足企业数据分析的需要而开发的一款产品&#xff0c;不同于一般的BI平台&#xff0c;DAP数据分析平台更侧重数据的聚合&#xff0c;平台预置有数据源注册、ODS注册与管理、数仓配置与数据聚合&#xff0c;从而实现企业业务数据的统一&#xff0c;构建…

不掌握这些坑,你敢用BigDecimal吗?

背景 一直从事金融相关项目&#xff0c;所以对BigDecimal再熟悉不过了&#xff0c;也曾看到很多同学因为不知道、不了解或使用不当导致资损事件发生。 所以&#xff0c;如果你从事金融相关项目&#xff0c;或者你的项目中涉及到金额的计算&#xff0c;那么你一定要花时间看看…

C++ 特殊类的设计

文章目录1. 设计一个只能在堆上创建对象的类2. 设计一个只能在栈上创建对象的类3. 设计一个类不能被拷贝4. 设计一个类 不能被继承5. 设计一个类&#xff0c;只能创建一个对象前言&#xff1a; 在本文中&#xff0c;我们掌握几种常见的特殊类的设计。1. 设计一个只能在堆上创建…

微信小程序使用vant 和 mobx 自动定义Tabbar

vant 和 mobx 自动定义Tabbar 在此案例中&#xff0c;用到的主要知识点如下&#xff1a; 自定义组件 Vant 组件库 MobX 数据共享 组件样式隔离 组件数据监听器 组件的 behaviors Vant 样式覆盖 1.首先需要给我们的app.json 配置tabBar “custom”&#xff1a;true 注意点&…

代码随想录算法训练营第五十九天| LeetCode503. 下一个更大元素 II、LeetCode42. 接雨水

一、LeetCode503. 下一个更大元素 II 1&#xff1a;题目描述&#xff08;503. 下一个更大元素 II&#xff09; 给定一个循环数组 nums &#xff08; nums[nums.length - 1] 的下一个元素是 nums[0] &#xff09;&#xff0c;返回 nums 中每个元素的 下一个更大元素 。 数字 x 的…

实践 DevOps 测试策略

什么是 DevOps 测试策略&#xff1f; DevOps 的一个重要组成部分是持续集成/持续交付(CI/CD)&#xff0c;在 CI 和 CD 之间的就是持续测试。 如果不进行持续测试&#xff0c;将会出现&#xff1a; 缺陷的泄漏软件延期交付客户不满意DevOps 测试策略的好处 可以提供更快的反…

如何在vscode、remix中结合hardhat编译部署合约

创建 hardhat 工程 # 创建npm空项目&#xff0c;注意这里要选择合约项目对应的文件目录 npm init # 安装 hardhat 环境&#xff0c;这里安装的版本 2.11.1 npm install --save-dev hardhat2.11.1 # 创建工程 npx hardhat首先创建 npm 空项目&#xff0c;注意这里要选择合约项目…

Linux编程环境

一、实验目的 1&#xff0e;熟悉Linux下C语言程序设计的基本步骤 2&#xff0e;掌握gcc编译器的各种参数的使用方法 3&#xff0e;掌握gcc编译器创建函数库的方法 4&#xff0e;掌握gdb调试程序的方法 5&#xff0e;掌握多文件编译中的makefile的用法 二、实验软硬件要求…

matlab学习笔记(八)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 matlab学习笔记&#xff08;八&#xff09;一、傅里叶变换的MATLAB求解二、连续时间信号的频谱图三、MATLAB分析LTI系统的频率特性一、傅里叶变换的MATLAB求解 MATLAB的symb…

大学生网页设计制作作业实例代码 (全网最全,建议收藏) HTML+CSS+JS

文章目录&#x1f4da;web前端期末大作业 (1500套) 集合一、网页介绍二、网页集合三、作品演示A电影主题B漫画主题C商城主题D家乡主题E旅游主题F餐饮/美食主题G环境主题H游戏主题I 个人主题K体育主题L博客主题M汽车主题N文化主题P美妆主题Q企业主题R教育主题S其他主题&#x1f…