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

目录

一、创建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时需要将其强制转换为Student类型,原因是Spring容器内部存储的对象都是Object类型的形式存储的,所以Spring容器能够管理多种不同类型的对象。当你从容器中获取一个Bean时,它返回的是Object类型的引用。因此为了使用该Bean的具体类型和方法,你需要将其强制转换为实际的Student类型。

在一个类在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

不应该热爱
关注 关注
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring进行时——Spring项目创建Bean的存储读取
未见花闻的博客
07-24 2159
本篇文章将介绍Spring项目创建,IDEA国内源的配置以及Bean的存储读取,所谓的Bean其实就是对象的意思,更详细地说Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象。
SpringBoot
weixin_43732943的博客
10-17 5095
虽然Spring的组件代码是轻量级的,但它的配置却是重量级的。Spring Boot的自动配置是一个运行时(更准确地说,是应用程序启动时)的过程,考虑了众多因素,才决定。Spring 3.0引入了基于Java的配置,这是一种类型安全的可重构配置方式,可以代替XML。和所有框架一样,Spring实用,但它要求的回报也不少。入与之有依赖关系的其他库的坐标,一旦选错了依赖的版本,随之而来的不兼容问题就会严重阻碍项目的开发。简单的说,起步依赖就是将具备某种功能的坐标打包到一起,并提供一些默认的功能。
Spring】关于Spring创建和使用以及bean的存储与获取
Superkom666的博客
05-10 330
spring是一个IoC容器,我们创建spring容器只需要在idea中创建一个maven项目,然后再pom.xml中添加相应的依赖,一个spring容器就创建好了在pom.xml中添加这段依赖就可以完成对spring创建了。
Spring创建和使用,存储读取Bean总结
qq_62712350的博客
05-16 656
Spring创建和使用,存储读取Bean总结
JavaSpring关于Bean的存和取、Spring的执行流程以及Bean的作用域和生命周期
最新发布
qq_43243800的博客
07-25 1325
Bean的存和取,存储Bean的五大注解,获取Bean的三种注入方式,Bean的作用域,设置作用域,Spring的执行流程,Bean的生命周期
详解Spring Boot 使用Java代码创建Bean并注册到Spring
08-31
Spring Boot应用中,我们可以使用Java代码来创建和注册Bean,这种方式相较于XML和注解配置提供了更高的灵活性。从Spring 3.0开始,引入了Java配置,使得开发人员可以直接通过编程的方式来定义Bean Definition,而...
详解Spring简单容器中的Bean基本加载过程
08-30
1. 解析 XML 文件:Spring 会解析 XML 文件,读取 bean 的定义。 2. 注册 bean:Spring 会将 bean 的定义注册到容器中。 3. 加载 bean:Spring 会加载 bean,并将其实例化。 4. 获取 bean:应用程序可以从容器中获取...
spring在IoC容器中装配Bean详解
08-28
在这些配置中,Spring 容器将读取 Bean 的配置信息,形成 Bean 定义注册表,然后实例化 Bean,将其放入 Bean 缓存池中,供应用程序使用。 二、Bean 基本配置 Bean 的基本配置包括 Bean 的命名、依赖注入和自动...
Spring框架|Bean的作用范围
匿名攻城狮
01-26 1720
文章目录一、Bean标签(1)作用(2)属性二、Bean标签的属性三、Bean标签的scope属性(1)测试scope="singleton"(2)scope="prototype"四、scope="singleton"带来的线程安全问题 一、Bean标签 (1)作用 Bean标签是用于配置对象,让 spring创建的。 默认情况下它调用的是类中的无参构造函数。如果没有无参构造函数则不能创建...
spring自动生成bean项目
05-05
运行项目,可以选择数据库的某张表进行填表名,类名,进行建bean的代码,下好不会用可以发邮箱到1297237518@qq.com
spring容器里存取bean
weixin_43532718的博客
11-25 2329
spring容器里的两个Map spring容器存取bean的过程是什么? Map中是怎么存放值的? 首先 , 先把各个对象码出来,把过程搭建好 1 . 建配置类 , 为这个类配置了一个包扫描 , 代码如下: @ComponentScan( value=“com.db”,excludeFilters= // 过滤掉@Controller.class, @ControllerAdvice.cla...
Spring中的bean的理解
热门推荐
yss的博客
03-11 9万+
首先看一下spring创建bean的方式 1. 使用构造器创建Bean实例 使用构造器来创建Bean实例是最常见的情况,如果不采用构造注入,Spring底层会调用Bean类的无参构造器来创建实例,因此要求该Bean提供无参的构造器。在这种情况下,class元素是必须的,class属性的值就是Bean实例的实现类。SpringBean实例的所有属性执行默认初始化,即所有基本类型为0或false,...
简单的javaBean综合应用项目实践
zhzh0620的博客
02-11 841
如果web应用全由JSP页面组成会影响web程序的扩展性和可维护性。这时就出现了JavaBean,数据和业务逻辑都可以封装在JavaBean中。 JavaBean设计原则:          公有类;         无参的构造方法;         私有属性;         get,set方法; 下面是一个JAVABEAN综合应用实践: 创建User类实现简单的数据存取:
java项目中的几种bean对象
回忆的往昔
02-25 3102
PO(persistant object) 持久对象 在o/r映射的时候出现的概念,如果没有o/r映射,没有这个概念存在了。通常对应数据模型(数据库),本身还有部分业务逻辑的处理。可以看成是与数据库中的表相映射的java对象。最简单的PO就是对应数据库中某个表中的一条记录,多个记录可以用PO的集合。PO中应该不包含任何对数据库的操作。VO(value object) 值对象 通常用于业务层之间的
完整JavaWeb项目笔记 第二部分-项目结构及Bean和Dao设计
o983950935的博客
12-23 1645
文章目录一 服务端项目结构二 表结构设计三 bean设计三 Dao设计 一 服务端项目结构   Java开发工具我用的是Eclipse,配置完Maven后,创建的war工程,接下来就是项目目录结构的划分,这一点的重要性说来可大可小,结构清晰,则开发更加顺利,结构不合理则变动会比较频繁,对于体量较小的项目而言虽然影响不大,但是出于习惯的考虑,还是对结构进行下划分: bean包中为数据表对应的Ja...
Springbean 配置文件路径问题(转载)
Leader的专栏
07-23 7707
  Springbean 配置文件路径问题在配置beans 的时候,可以使用 ContextLoaderListener 或者 ContextLoaderServlet搭配名为contextConfigLocation 的Context-Param,也可以在DispatchServlet的 init-param中定义。但是其中要注意的是,无论如何,当web容器初始化Dis
Spring Bean 注解配置
Hello, New World!
06-22 1002
Spring Bean 注解配置1. 注解配置 Bean2. Spring 整合 junit3. @Import 参考资料:https://lfvepclr.gitbooks.io/spring-framework-5-doc-cn/content/ 1. 注解配置 Bean 写一个 SpringConfig.java 作为注解配置类,它的作用和 bean.xml 是一样的。以 jdbc 为例。 Spring中的新注解: @Configuration 作用:指定当前类是一个配置类 注意:当配置类作
Spring知识一(bean配置)
心静、世界就静
03-13 5541
spring框架bean配置详解
Spring入门:深入理解Bean的基础配置与应用
Spring容器通过读取这些配置,根据Bean的定义动态地创建和管理对象,实现了依赖注入(DI)和控制反转(IOC),这有助于解耦代码,提高代码的可测试性和可维护性。在实际开发中,ApplicationContext提供了更高级的...
写文章

热门文章

  • 【Spring】三大依赖注入(@Autowired,Setter,构造方法) 10140
  • Mysql笛卡尔积详解(附实现多表查询代码实现) 8387
  • Java字符串常量池详解(StringTable) 5128
  • 如何利用SpringSecurity进行认证与授权 5122
  • 入门HTML(含常见标签)—附实现案例 4805

分类专栏

  • 学习笔记

最新评论

  • 【Spring】三大依赖注入(@Autowired,Setter,构造方法)

    hui_qiang: 有一些是来自ai的回答吧?并不准确

  • 【Spring】三大依赖注入(@Autowired,Setter,构造方法)

    皇帝也有烦恼: 误人子弟了,构造方法注入需要延迟加载才能解决循环依赖问题

  • 如何理解Redis中的缓存雪崩,缓存穿透,缓存击穿?

    征途黯然.: 表情包This 如何理解Redis中的缓存雪崩缓存穿透缓存击穿 article is truly great and very insightful.

  • SpringCloud之OpenFeign入门与实战系列

    小劉要努力~: 我不做大哥好多年,本想来这再一次成为大哥,但阅读完全篇,我俯首称弟,大哥您好,希望在博客之路上大哥能带着小弟一路走向巅峰,多多照顾小弟,偶尔去小弟的博客空间饮酒赋诗,论天地之英雄,聊江湖之豪杰,评苍穹之能人,阅三界之怪才。

  • 【Spring】三大依赖注入(@Autowired,Setter,构造方法)

    浑水摸鱼仙君: spring没法解决构造器循环依赖,和你的文章相反,spring用三级缓存可以在大部分场景下解决属性和set注入的循环依赖。

大家在看

  • 网络安全(黑客)——自学2024
  • Linux常用命令 874
  • 三层交换机太强大了,不复杂,这篇文章给您讲懂!
  • MySql基础:表的索引
  • [sci三区-Symmetry代码摘要]A Survey of Automatic Source Code Summarization 326

最新文章

  • Elasticsearch学习笔记Day2
  • Elasticsearch学习笔记Day1
  • 关于学习Token、JWT、Cookie等验证授权方式的总结
2024年21篇
2023年35篇
2022年33篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家广东玻璃钢牛动物雕塑玻璃钢雕塑景观沈阳节日商场美陈商场创意商业美陈步骤南京户外玻璃钢雕塑销售电话做玻璃钢雕塑哪家实惠济宁玻璃钢人物雕塑摆件无锡镜面玻璃钢雕塑在线咨询云浮玻璃钢动物雕塑哪里买泰安广场玻璃钢雕塑厂家菏泽哪里有玻璃钢彩绘雕塑厂家嘉峪关动物玻璃钢雕塑公司广州主题玻璃钢雕塑闵行玻璃钢雕塑衢州玻璃钢卡通雕塑厂家深圳黄飞鸿武术玻璃钢雕塑广州玻璃钢雕塑代理商信宜玻璃钢影视道具雕塑制作陕西玻璃钢雕塑施工玻璃钢雕塑北方户外玻璃钢红军雕塑供应上海创意玻璃钢雕塑生产厂家长沙玻璃钢人像雕塑洛阳肖像玻璃钢景观雕塑厂家陕西户外玻璃钢雕塑市场浙江平阳玻璃钢雕塑厂济宁玻璃钢仿真动物雕塑梅州玻璃钢人物雕塑贵州创意玻璃钢雕塑优势绵阳玻璃钢铜鹤雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化