【Spring core学习二】创建Spring 项目 Spring的存

news2025/1/18 9:08:17

目录

🌟一、创建最原始的Spring-core项目。

🌟二、怎么往Spring中存取对象?

🌷1、在Spring中存对象

🌷2、通过getBean获取对象的三种方式

🌷3、通过factory方式获取对象

🌟三、对存对象的优化:添加注解存储 Bean 对象

🌷1、类注解:五大注解

1.1 五大注解的使用方法:@Controller(控制器存储)

1.2 五大注解之间的关系

🌷2、方法注解@Bean

🌷3、重命名@Bean

3.1 对Bean重命名

3.2 五大注解的重命名

3.3 如何给@Bean添加参数


🌟一、创建最原始的Spring-core项目。

1、创建一个maven项目。

 2、引入Spring依赖。

<dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.2.13.RELEASE</version>
        </dependency>
    </dependencies>

 3、添加一个启动类


🌟二、怎么往Spring中存取对象?

首先知道对象。在Spring中对象也叫作Bean。

🌷1、在Spring中存对象

先创建一个对象:比如User类。——> 在Spring中进行定义管理:在resources文件下,新建一个xml文件名为“spring-config.xml”,写入以下代码(下面的代码就是对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">
</beans>

🌷2、通过getBean获取对象的三种方式

方式1:id要是唯一的。有两个对应关系。id指的是对象的id,class后的路径是全限类名(包名称.类名)

当一个类有多个对象的时候:成功

方式2:类获取

 当一个类有多个对象的时候:报错

 方式3:上面两种的结合

 验证上面三种方式拿到的对象不是同一个?

🌷3、通过factory方式获取对象

已经不推荐使用了。

 问题1:beanFactory与ApplicationContext方式的区别?

(1)共同点:都是用于获取Springbean的;

(2)不同点:

  • Spring 容器有两个顶级的接⼝BeanFactory 和ApplicationContext。其中 ApplicationContext是BeanFactory的一个子类。它除了继承了 BeanFactory 的所有功能之外,还拥有独特的特性,还添加了对国际化⽀持、环境、资源访问⽀持、以及事件传播等⽅⾯的⽀持。
  • ApplicationContext 是提前将所有的bean全部加载完,使用的时候直接获取,⽽BeanFactory 是懒加载的方式,使用的时候才去创建。


🌟三、对存对象的优化:添加注解存储 Bean 对象

🌷1、类注解:五大注解


1.1 五大注解的使用方法:@Controller(控制器存储)

 创建spring-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"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <content:component-scan base-package="com.bit.service"></content:component-scan>
</beans>

我们先来观察下面两种现象:

现象1: 

(1)配置扫描路径:spring-configxml文件下

  

(2)在类上加注解

 (3)main方法中


现象2:

        我现在对上面的代码只改动一处:将类名从UseController改为UController。理论上来说没有任何问题吧,名字又不影响代码本身运行。但是当我们运行代码之后,结果却出乎意料,它竟然报错了。这个时候我们就要俩看一下源码来观察到底Bean是怎么命名的?


 看源码观察Bean的名称的命名规则(重点)

所以现象2中,name(也就是传进来的类名UController)长度大于1并且名字前两位是大写,返回的是名字自身,因此代码应该这样写:


当名称前两个字母是大写并且长度大于1的时候,要写类名本身。

否则是:类名的第一个字母小写即可。

(还有一种重命名的方式,见第三节介绍!)

@Service(控制器存储)@Repository(仓库存储)@Component(组件存储)@Configuration(配置存储)用法都同上。

问题2:为什么要用这么多注解?

        为什么需要怎么多的类注解也是相同的原因,就是让程序员看到类注解之后,就能直接了解当前类的⽤途。提升性能。

1.2 五大注解之间的关系

@Controller / @Service / @Repository / @Configuration都是属于 @Component 的“⼦类”。

🌷2、方法注解@Bean

1、@Bean必须搭配五大注解使用; 

2、@Bean的名称是方法名,要一模一样! 

🌷3、重命名@Bean

 3.1 对Bean重命名

(1)情况1:单个名称

@Bean后面给定新的名称,在getBean获取的时候也是新的名称。

@Bean("ccc")

 (2)情况2:多个名称

@Bean(name= {"aaa","bbb"})

这个重命名的 name 其实是⼀个数组,⼀个 bean 可以有多个名字。并且 name={} 可以省略。@Bean({"aaa", "bbb"})。

3.2 五大注解的重命名

 这种重命名的方式对于五大注解也是适用的!

3.3 如何给@Bean添加参数

常规写法:

(1)代码中写构造函数来传参

        user方法中需要一个Integer类型和String类型的参数,就会在容器中去找String类型和Integer类型,找到了就放进去。

后来又在想,如果有多个相同的类型的话,该找哪一个呢?然后我又做了个验证,发现如下结果:

 如果有一个,就以类型来匹配!如果有多个,就以名称来匹配! 

(2)Spring中xml文件配置的方式,如何传参 。

运行结果


 加油!别放弃!

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

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

相关文章

3分钟了解Android中稳定性测试

一、什么是Monkey Monkey在英文里的含义是猴子&#xff0c;在测试行业的学名叫“猴子测试”&#xff0c;指的是没有测试经验的人甚至是根本不懂计算机的人&#xff08;就像一只猴子&#xff09;&#xff0c;不需要知道程序的任何用户交互方面的知识&#xff0c;给他一个程序&a…

TCP协议3次握手4次挥手

建立一个TCP连接时&#xff0c;需要客户端和服务端总共发送3个包以确认连接的建立&#xff0c;在socket编程中&#xff0c;这一过程由客户端执行connect来触发&#xff0c;在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。 TCP三次握手的过程如下:第一次握…

【编译之美】【5. 代码优化:数据流分析】

有些优化只能在全局优化中做&#xff0c;在本地优化中做不了&#xff0c;比如&#xff1a; 代码移动&#xff08;Code motion&#xff09;能够将代码从一个基本块挪到另一个基本块&#xff0c;比如从循环内部挪到循环外部&#xff0c;来减少不必要的计算。&#xff08;循环剥离…

【HarmonyOS】Stage模型二维码/条码生成与解析

HarmonyOS的官方API中提供了QRCode组件&#xff08;QRCode-基础组件-组件参考&#xff08;基于ArkTS的声明式开发范式&#xff09;-ArkTS API参考-HarmonyOS应用开发&#xff09;&#xff0c;这个组件有个缺点只能用于显示二维码&#xff0c;无法显示条码与解析码内容&#xff…

【hadoop】部署hadoop的伪分布模式

hadoop的伪分布模式 伪分布模式的特点部署伪分布模式hadoop-env.shhdfs-site.xmlcore-site.xmlmapred-site.xmlyarn-site.xml对NameNode进行格式化启动Hadoop 对部署是否完成进行测试免密码模式免密码模式的原理&#xff08;重要&#xff09;免密码模式的配置 伪分布模式的特点…

Linux离线环境Jenkins部署SpringBoot

Jenkins服务器 把Jar包上传到Linux服务器的/jenkins/目录下 Dashboard----》新建任务----》构建一个自由风格的软件项目----》test 修改jenkins工作空间 新建构建前执行命令stop.sh&#xff0c;停止SpringBoot并备份 &#xff08;这里是目标服务器&#xff0c;即部署项目的…

2.3 移动次数计算和静态链表

1. 元素移动次数计算问题 本问题针对顺序表, 因为链表不需要移动元素, 只需要重新连接指针即可. 题型一: 计算在某个位置上插入一个新元素会导致多少元素的移动. 题型二: 计算在每个位置上插入一个元素所导致的平均移动次数. 先计算每个位置上插入的概率, 一般是1/n, 平均移…

vue Router(v3.x) 路由传参的三种方式详解

文章目录 前言一&#xff0c;params 传参&#xff08;显示参数&#xff09;注意&#xff1a; 响应路由参数的变化 二&#xff0c;params 传参&#xff08;不显示参数&#xff09;注意&#xff1a;上述这种利用 params 不显示 url 传参的方式会导致在刷新页面的时候&#xff0c;…

【HCIA】10.VLAN间通信

VLAN间通信的解决方法 使用路由器的物理接口 路由器三层接口作为网关&#xff0c;转发本网段前往其它网段的流量。路由器三层接口无法处理携带VLAN Tag的数据帧&#xff0c;因此交换机上联路由器的接口需配置为Access。路由器的一个物理接口作为一个VLAN的网关&#xff0c;因此…

即视角|出海资本热土——印尼市场洞察(下)

即视角Insight 共享即构新洞察&#xff0c;共建行业新动能——ZEGO即构科技基于音视频技术领域的多年深耕&#xff0c;综合面向各行业的服务经验&#xff0c;在【即视角】栏目发布即构对行业的洞察。 在《即视角&#xff5c;出海资本热土——印尼市场洞察&#xff08;上&…

WIFI鉴权的过程

1.前言 当今手机连接WIFI热点普遍采用WPA2-PSK的方式。本文讨论这个方式的鉴权过程。 2. 鉴权过程 我们称需要连接的一方为station&#xff0c;简称STA。提供WIFI热点的一方为AP。 连接之前, station需要知道AP的名字&#xff08;ssid&#xff09;和密码(PSK)。 定义 &#x…

Openlayers实战:多地图底图切换

在实际的地图项目中,不管是我们看到的百度地图还是高德地图等,都会有地图切换这一项。 在Openlayers实战中,我们用三种地图做demo,分别是谷歌地图。Openstreetmap,stamen地图。 切换的主要原则是设置三个底图层,设定其显示状态,用到了visible这一个属性。 效果图 源代码…

更新补丁导致360随身wifi提示USB设备驱动异常

运行环境&#xff1a;Windows11 更新补丁版本&#xff1a;2023-适用于 Windows 11 的 07 累积更新&#xff0c;适合基于 x64 的系统 (KB5028182) 硬件版本&#xff1a;360随身wifi-3 错误提示&#xff1a;USB设备驱动异常&#xff0c;创建Wifi网络失败 采取措施&#xff1a;更新…

Openlayers实战:加载Bing地图

Bing地图在地图领域有一定的江湖地位,是微软公司的产品。 在Openlayers其内置了Bing地图的方法,可以研究其API。我们的实战中是要其成为一个底图,很简单的就可以加载出来。 效果图 源代码 /* * @Author: 大剑师兰特(xiaozhuanlan),还是大剑师兰特(CSDN) * @此源代码版…

ELK 企业级日志分析系统(四)

ELK 一、部署Kafka集群二、Kafka的命令行操作三、Kafka架构深入四、FilebeatKafkaELK部署 一、部署Kafka集群 1.下载安装包 官方下载地址&#xff1a;http://kafka.apache.org/downloads.html cd /opt wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.7.1/kafka_2…

Halcon会慢慢被淘汰吗?

作为一个语言模型&#xff0c;我不能提供预测未来的确凿答案。然而&#xff0c;我可以提供一些关于Halcon和机器视觉市场的观察和趋势。 我这里刚好有嵌入式、单片机、plc的资料需要可以私我或在评论区扣个6 Halcon是一款商业机器视觉软件&#xff0c;具有广泛的应用和用户群…

“AI in the Alps“:身体与精神的一场盛宴

作者&#xff1a;Christofer Dutz 得益于 Timecho 的组织和安排&#xff0c;我最近参加了一个精彩绝伦的活动 “AI in the Alps”&#xff0c;并从中收获颇丰。 这次活动是由德国工业界知名博客 “Industrial AI Podcast”&#xff08;http://aipod.de&#xff09;的组织者 Ro…

metersphere数据库SQL断言应用

在使用metersphere的时候&#xff0c;需要查询数据库数据来验证接口是否正常&#xff0c;在查看使用手册时&#xff0c;发现不是很明确&#xff0c;在研究一点时间后&#xff0c;终于明白&#xff0c;在此写下心得。 metersphere使用手册地址&#xff1a;接口测试 - 接口用例操…

【探索AI未来】人工智能技术在软件开发中的应用与革新

自我介绍⛵ &#x1f4e3;我是秋说&#xff0c;研究人工智能、大数据等前沿技术&#xff0c;传递Java、Python等语言知识。 &#x1f649;主页链接&#xff1a;秋说的博客 &#x1f4c6; 学习专栏推荐&#xff1a;人工智能&#xff1a;创新无限、MySQL进阶之路、C刷题集、网络安…

第一个Matplotlib绘图程序

本节学习第一个 Matplotlib 绘图程序&#xff0c;如何使用 Matplotlib 绘制一个简单的折线图。下面绘制一个简单正弦曲线图&#xff0c;它显示了角度与正弦函数值之间的关系。 第一个绘图程序 首先导入 Matplotlib 包中的 Pyplot 模块&#xff0c;并以 as 别名的形式简化引入…