Spring项目创建与 Spring Bean 的存储与读取

news2025/6/13 20:59:08

目录

一、创建Spring项目

1.1 创建Maven项目

1.2 添加 Spring 框架依赖

1.3 添加启动类

二、Bean对象的创建与存储

2.1 创建Bean

2.2 将Bean注册到容器

2.3 获取并使用Bean对象

2.3.1 创建Spring上下文

2.3.2 从Spring容器中获取Bean对象​编辑

延申(多种方式获取Bean):

2.3.3 使用bean

2.3.4 ApplicationContext VS BeanFactory(常见面试题)

三、总结


前言:我们知道,Spring 就是⼀个包含了众多⼯具⽅法的 IoC 容器。既然是容器那么它就具备

两个最基本的功能:

  • 将对象存储到容器(Spring)中;
  • 从容器中将对象取出来。

一、创建Spring项目

接下来使⽤ Maven ⽅式来创建⼀个 Spring 项⽬,创建 Spring 项⽬和 Servlet 类似,总共分为以下 3步:

  1. 创建⼀个普通 Maven 项⽬。
  2. 添加 Spring 框架⽀持(spring-context、spring-beans)。
  3. 添加启动类。

在 Java 语⾔中对象也叫做 Bean,所以后⾯咱们再遇到对象就以 Bean 著称。

1.1 创建Maven项目

 当目录变成如下所示时,Maven项目就初始化好了。

 

1.2 添加 Spring 框架依赖

从中央仓库中下载Spring Context的依赖:

1.3 添加启动类

最后在创建好的项目Java文件夹下创建一个启动类,包含main方法即可:

二、Bean对象的创建与存储

2.1 创建Bean

所谓的 Bean 就是 Java 语⾔中的⼀个普通对象,实现代码如下:

2.2 将Bean注册到容器

 在创建好的项目中添加 Spring 配置文件 spring-config.xml,将此文件放在resources的根目录下:

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">

</beans>

接下来,再将Student对象注册到Spring中即可,具体操作如下:

2.3 获取并使用Bean对象

获取并使用Bean对象,分为以下三步:

  1. 得到Spring(上下文)对象,因为对象都交给Spring管理,所以获取对象要从Spring中获取,那么就先得到Spring的上下文。
  2. 通过Spring(上下文),获取某一个指定的Bean对象
  3. 使用Bean对象

如果取多个 Bean 的话重复以上第 2、3 步骤。

2.3.1 创建Spring上下文

利用ApplicationContext来创建Spring 上下文:

 需要注意的是:这里的路径必须与Spring配置文件的名称相同,否则无法创建成功。

2.3.2 从Spring容器中获取Bean对象

延申(多种方式获取Bean):

1.通过名称获取:

2.通过类型获取:

需要注意,如果Spring中一个类型存储了多个实例,那么使用类型获取Bean就会报错:

在一个类在bean中存储了两次,那么这两个bean地址是否相同呢,我们来验证一下:

因此,这里创建的两个不同的bean实例,地址是不同的,不会因为存的是同一个类的bean就地址一样。

3.通过名称+类型方式获取:

2.3.3 使用bean

import com.spring.demo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        //1.得到Spring的上下文对象,创建的时候需要配置 Spring配置 的信息
        ApplicationContext context =
                new ClassPathXmlApplicationContext("Spring-config.xml");
        //2。从Spring容器中获取到Bean对象
           Student student = (Student)context.getBean("student");
           //3.使用Bean(非必须的)
           student.sayHi();
    }
}

运行结果:

2.3.4 ApplicationContext VS BeanFactory(常见面试题)

除了ApplicationContext之外,我们还可以使用BeanFactory来作为Spring的上下文,如下代码所示:

我们发现,好像在当前的场景下,ApplicationContext 和 BeanFactory 效果是一样的,这是因为ApplicationContext属于BeanFactory的子类:

既然是两者之间存在继承关系,那我们来看看两者之间有哪些区别:

我们先在com.spring.demo包下创建一个Teacher类:

 并在Spring配置文件下,把Teacher存到Spring中:

观察两者的区别:

可以发现,Application是一次性加载并初始化所有的Bean对象,而BeanFactory属于懒加载,是需要哪个才去加载哪个,因此BeanFactory更加轻量。

ApplicationContext 和 BeanFactory的区别总结

  • 继承关系和功能⽅⾯来说:Spring 容器有两个顶级的接⼝:BeanFactory 和ApplicationContext。其中 BeanFactory 提供了基础的访问容器的能⼒,⽽ApplicationContext属于 BeanFactory 的⼦类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持。
  • 从性能⽅⾯来说:ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,⽽BeanFactory 是需要那个才去加载那个,因此更加轻量,因此ApplicationContext比较费内存,一次性加载完成,但是在之后的读取速度会非常快,而BeanFactory因为需要节省内存,调用时才加载初始化bean,所有效率不高。

三、总结

a.创建Spring项目

  1. 创建一个maven项目
  2. 添加Spring-context依赖
  3. 创建一个启动类(为后面从Spring容器中获取bean做准备)

b.存储Bean

  1. 先创建Bean对象
  2. 通过Spring配置文件(spring-config.xml)<bean id="bean名称" class="包名+类名" ></bean>

c.读取bean

  1. 得到Spring对象(ApplicationContext,BeanFactory)
  2. 通过Spring对象 getBean方法获取Bean对象【DI操作】
  3. 非必须:使用bean

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

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

相关文章

开放式耳机新巅峰!南卡OE Pro兼备澎湃音质、舒适佩戴、创新设计

众所周知&#xff0c;当初苹果带来TWS耳机新时代以后&#xff0c;后面有许多的蓝牙耳机相继跟随和模仿&#xff0c;但NANK南卡却独辟蹊径&#xff0c;将在近日重磅推出首款0压无感全开放无线耳机——南卡OE Pro&#xff0c;走向开放式TWS耳机的新时代。 31度黄金倾斜受力面&…

BGP策略实验

实验要求&#xff1a; 1、使用PreVa1策略&#xff0c;确保R4通过R2到达192.168.10.0/24 2、使用AS_Path策略&#xff0c;确保R4通过R3到达192.168.11.0/24 3、配置MED策略&#xff0c;确保R4通过R3到达192.168.12.0/24 4、使用Local Preference策略&#xff0c;确保R1通过R2到…

有人靠ChatGPT 狂赚200W !有人到现在,连账号都没开通......

作者| Mr.K 编辑| Emma来源| 技术领导力(ID&#xff1a;jishulingdaoli)互联网风水轮流转&#xff0c;当初元宇宙盛极一时之际&#xff0c;在一些知识付费平台上&#xff0c;任何一个关于元宇宙的课程或培训&#xff0c;都很热销&#xff0c;有一定号召力的博主&#xff0c;登…

【JS】1651- 10 个 JS 中 try...catch 使用技巧

作为一位 Web 前端工程师&#xff0c;JavaScript 中的 try...catch 是我们常用的特性之一。本文我将分享 10 个有用的 try...catch 使用技巧&#xff0c;让你在处理异常时更加得心应手。1. 捕获所有异常如果你想捕获代码中所有可能的异常&#xff0c;可以使用一个不带参数的 ca…

对标ChatGPT的开源中文方案

目录 前言 一、Meta发布大语言模型LLaMA 二、斯坦福基于 Meta 的 LLaMA 7B 模型微调出Alpaca 三、基于TencentPretrain训练中文LLaMA大规模语言模型 四、基于斯坦福Alpaca训练中文对话大模型BELLE 五、 清华开源项目ChatGLM中文对话模型 六、基于LLaMA的开源中文语言模型…

SpringBoot整合xxl-job详细教程

SrpingBoot整合xxl-job&#xff0c;实现任务调度说明调度中心执行器调试整合SpringBoot说明 Xxl-Job是一个轻量级分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用。Xxl-Job有…

三菱PLC GX Work2学习笔记

Programmable Logic Controller 1 指令集 1.1 触点指令 指令名称指令示例图示常开触点LDLD X01常闭触点LDILDI X12输出线圈OUTOUT Y03或常开触点OROR X33或常闭触点ORIORI X33置位SETSET Y03复位RSTRST Y03区域复位ZRSTZRST Y0 Y53上升沿LDPLDP X03下降沿LDFLDF X13结果上升…

vue项目使用electron打包成桌面应用

学习关键语句 使用electron打包vue项目 electron制作桌面应用 写在前面 很想使用 electron 制作一个桌面应用&#xff0c;但是真的上手使用的时候才发现 electron 的坑实在是太多了 先将遇到的坑记录在这里&#xff0c;遇到一个记录一个 使用 9 以上版本的 vue-i18n 的项目打…

有哪些适合学生党或打工人的AI工具?

以下是一些适合学生党或打工人使用的AI工具&#xff1a; 1. Grammarly&#xff1a;用于检查语法和拼写错误的AI写作助手。 2. Duolingo&#xff1a;一款免费的AI语言学习应用程序&#xff0c;适合学习不同语言。 3. Quizlet&#xff1a;一种在线学习工具&#xff0c;用于创建、…

FE_CSS 复合选择器 元素显示模式 CSS背景

1 CSS 的复合选择器 1.1 后代选择器 后代选择器又称为包含选择器&#xff0c;可以选择父元素里面子元素。其写法就是把外层标签写在前面&#xff0c;内层标签写在后面&#xff0c;中间用空格分隔。当标签发生嵌套时&#xff0c;内层标签就成为外层标签的后代。 元素1 元素2 {…

MyBatis多表查询+动态sql

文章目录MyBatis多表查询1. 多表一对一查询2. 多表一对多动态SQL1.\<if\>标签2.\<trim\>标签3. \<where\>标签4.\<set\>标签5. \<foreach\>标签MyBatis多表查询 在全局配置文件中中设置MyBatis执行日志 mybatis:configuration:log-impl: org.a…

如何使用手机远程锁定电脑?

​“有时我已经到家了&#xff0c;却忘记锁上我的公司的电脑。每次我都害怕我电脑上的数据丢失。我可以在手机上远程锁定我的Windows计算机以避免这个问题吗&#xff1f;” 答案是肯定的&#xff01;很多人可能会遇到同样的下班不锁电脑的问题&#xff0c;有的人可能尝…

AOP执行顺序

AOP执行顺序 下面是个人的一点总结&#xff01;理解可能存在欠缺欢迎批评指正 1.AOP相关概念 Aspect&#xff1a;切面&#xff0c;由连接点和增强组成的。Aspect注解进行标识。Join point&#xff1a;连接点。代表一次方法的执行。Advice&#xff1a;增强。在连接点执行的操作。…

微服务+springcloud+springcloud alibaba学习笔记【Eureka服务注册中心】(3/9)

Eureka服务注册中心 3/91、服务注册与发现1.1 什么是服务治理&#xff1a;1.2 什么是服务注册与发现&#xff1a;1.3 Eureka服务注册与发现2、单机版eureka2.1 创建module2.2改pom依赖2.3写yml配置文件:2.4主启动类2.5 修改服务提供者 cloud-provider-payment8001 模块&#xf…

软件测试工作主要做什么

随着信息技术的发展和普及&#xff0c;人们对软件的使用越来越普及。但是在软件的使用过程中&#xff0c;软件的效果却不尽如人意。为了确保软件的质量&#xff0c;整个软件业界已经逐渐意识到测试的重要性&#xff0c;也有越来越多的小伙伴加入了软件测试这个行业中来。软件测…

微积分——极值定理的证明

1. 提出问题 极值定理(The Extreme Value Theorem)最初是由捷克数学家波尔查诺(Bernard Bolzano(1781年10月5号-1848年11月18号), 他是一位意大利血统的波希米亚数学家、逻辑学家、哲学家、神学家和天主教神父&#xff0c;也以其自由主义观点而闻名)证明&#xff0c;在1830年代…

基于t-SNE的Digits数据集降维与可视化

基于t-SNE的Digits数据集降维与可视化 描述 t-SNE(t-分布随机邻域嵌入)是一种基于流形学习的非线性降维算法&#xff0c;非常适用于将高维数据降维到2维或者3维&#xff0c;进行可视化观察。t-SNE被认为是效果最好的数据降维算法之一&#xff0c;缺点是计算复杂度高、占用内存…

高效时间管理日历 DHTMLX Event Calendar 2.0.3 Crack

DHTMLX Event Calendar用于高效时间管理的轻量级 JavaScript 事件日历 DHTMLX 可帮助您开发类似 Google 的 JavaScript 事件日历&#xff0c;以高效地组织约会。 用户可以通过拖放来管理事件&#xff0c;并以六种不同的模式显示它们。 JavaScript 事件日历功能 轻的简单的 Java…

UDP/TCP的相关性你知道几个?

TCP/IP网络原理——主要围绕UDP/TCP进行讲解 文章目录TCP/IP网络原理——主要围绕UDP/TCP进行讲解应用层传输层UDP/TCPTCP丢包总结应用层 网络协议的五层协议分别是应用层&#xff0c;传输层&#xff0c;网络层&#xff0c;数据链路层&#xff0c;物理层&#xff0c;这五层构成…

【STL十】关联容器——set容器、multiset容器

【STL十】关联容器——set容器、multiset容器一、set简介二、头文件三、模板类四、set的内部结构五、成员函数1、迭代器2、元素访问3、容量4、修改操作~~5、操作~~5、查找6、查看操作六、demo1、查找find2、修改操作insert3、修改操作erase、clear七、multisetset和multiset会根…