Spring【Spring的创建与使用】

news/2024/5/17 9:55:23/文章来源:https://blog.csdn.net/m0_59735420/article/details/127950747

Spring【Spring的创建项目与使用】

  • 🍎一.Spring创建项目
    • 🍒1.1 创建⼀个 Maven 项⽬
    • 🍒1.2 添加 Spring 框架⽀持
    • 🍒1.3 添加启动类
  • 🍎二.Bean对象的存储与获取
    • 🍒2.1 存储 Bean 对象
      • 🍉 2.1.1 创建 Bean
      • 🍉 将 Bean 注册到容器
    • 🍒2.2 获取 Bean 对象
      • 🍉 2.2.1 创建 Spring 上下文
      • 🍉 2.2.2 获取指定的Bean对象与使用
  • 🍎 三.总结
    • 🍒 Bean的存储与获取流程
    • 🍒3.2 ApplicationContext VS BeanFactory 区别

🍎一.Spring创建项目

经过前⾯的学习我们已经知道了,Spring 就是⼀个包含了众多⼯具⽅法的 IoC 容器

Spring具备两个最基本的核心功能:

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

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

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

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

🍒1.1 创建⼀个 Maven 项⽬

与Servlet一致点击Maven后不需要勾选其他设置点击Next即可
在这里插入图片描述
只需要命名好项目名称即可

在这里插入图片描述

🍒1.2 添加 Spring 框架⽀持

在项⽬的 pom.xml 中添加 Spring 框架的依赖⽀持,xml 配置如下:

 <dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.3.RELEASE</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>5.2.3.RELEASE</version></dependency>

配置好依赖后记得点击右上角刷新后才是真正的配置好Spring框架依赖
在这里插入图片描述

🍒1.3 添加启动类

最后在创建好的项⽬ java ⽂件夹下创建⼀个启动类,包含 main ⽅法即可:

public class Test {public static void main(String[] args) {}
}

🍎二.Bean对象的存储与获取

🍒2.1 存储 Bean 对象

🍉 2.1.1 创建 Bean

public class User {public String sayHi(String name) {return name + " hello!";}
}

🍉 将 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>

接下来,再将 User 对象注册到 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"><bean id="user" class="com.beans.User"></bean>
</beans>

🍒2.2 获取 Bean 对象

获取并使⽤ Bean 对象,分为以下 3 步:

  1. 得到 Spring 上下⽂对象,因为对象都交给 Spring 管理了,所以获取对象要从 Spring 中获取,那么就得先得到 Spring 的上下⽂
  2. 通过 Spring 上下⽂,获取某⼀个指定的 Bean 对象
  3. 使⽤ Bean 对象

🍉 2.2.1 创建 Spring 上下文

ApplicationContext 与 BeanFactory都是通过 xml 的配置来获取所有的 Bean 容器

Spring 上下⽂对象可使⽤ ApplicationContext,实现代码如下:

   ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");

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

   BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring.xml"));

🍉 2.2.2 获取指定的Bean对象与使用

ApplicationContext获取指定的 Bean 对象

        //1. 得到 spring 上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");//2. 根据上下文对象提供的方法获取到bean//User user = (User) context.getBean("user");//根据Bean类型获取类对象,写法简单,单容易出错(在spring.xml多次注入容易出错)//User user =context.getBean(User.class);//根据Bean的name和Bean类型User user =context.getBean("user",User.class);//3.使用beanuser.sayHi("张三");

BeanFactory获取指定的 Bean 对象

      //1.使用Bean工厂BeanFactory factory = new XmlBeanFactory(new ClassPathResource("spring.xml"));//2.根据Bean工厂获取BeanUser user1 = (User) factory.getBean("user");//3.使用Beanuser1.sayHi("李四");

⼆者的区别:当有⼀个类型被重复注册到 spring-config.xml 中时,只能使⽤根据名称获取了,⽐如以下程序:
在这里插入图片描述

🍎 三.总结

🍒 Bean的存储与获取流程

  1. 操作容器之前,先要有容器,所以先要得到容器
  2. 存对象
    a. 创建 Bean(普通类)
    b. 将 Bean 注册(配置)到 spring-confing.xml 中
  3. 取对象
    a. 得到 Spring 上下⽂,并读取到 Spring 的配置⽂件(ApplicationContext 或 BeanFactory)
    b. 获取某⼀个 Bean 对象(getBean)
    c. 使⽤ Bean 对象
    在这里插入图片描述

🍒3.2 ApplicationContext VS BeanFactory 区别

●继承关系和功能方面来说:(BeanFactory是ApplicationContext父类)
Spring 容器有两个顶级的接⼝:ApplicationContext属于 BeanFactory 的⼦类

● 方法方面来讲 :(getBean方法)
都提供了getBean()方法,其中 BeanFactory 提供了基础的访问容器的能⼒,⽽ApplicationContext属于 BeanFactory 的⼦类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持

●从性能方面来说:(BeanFactory是"懒汉" ,ApplicationContext是"硬汉")
ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,⽽BeanFactory 是需要那个才去加载那个,因此更加轻量

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言与RStudio的下载与安装方法

本文介绍R语言及其集成开发环境RStudio的下载、安装方法。 R语言是一个属于GNU操作系统的开源软件&#xff0c;在数据统计与分析、可视化等方面具有优秀的表现&#xff1b;而RStudio则是R语言的集成开发环境&#xff08;IDE&#xff09;&#xff0c;可以帮助我们更好地编辑、调…

MIT 6.S081 Operating System Lecture5 (随意的笔记)

系列文章目录 文章目录系列文章目录TrapsA questionsyscallTraps 用户空间和内核空间的切换通常被称为 trap example: shwrite()ecall(); //write 通过 ecall() 指令执行系统调用之后跳转执行到 usertrap 如下图的执行过程。最终sys_write将要显示的数据输出到 console 上 …

clickHouse基础语法

clichouse数据类型 整形 lnt8 8bit,1字节 &#xff08;-128-127&#xff09;lnt16 16bitlnt32 32bitlnt64 64bit 无符号整型 相比于上面&#xff0c;就是把负数部分挪到正数部分 Ulnt8 &#xff08;0-255&#xff09;Ulnt16Ulnt32Ulnt64 浮点型 Float32 也就是floatFloa…

【Hack The Box】Linux练习-- Luanne

HTB 学习笔记 【Hack The Box】Linux练习-- Luanne &#x1f525;系列专栏&#xff1a;Hack The Box &#x1f389;欢迎关注&#x1f50e;点赞&#x1f44d;收藏⭐️留言&#x1f4dd; &#x1f4c6;首发时间&#xff1a;&#x1f334;2022年11月24日&#x1f334; &#x1f3…

数据结构堆介绍,图文详解分析——Java/Kotlin双版本代码

堆介绍 堆是一种特殊的树结构。根据根节点的值与子节点值的大小关系&#xff0c;堆又分为最大堆和最小堆。 最大堆&#xff1a;每个节点的值总是大于或者等于其任意子节点的值。所以最大堆中根节点即为最大值。 最小堆&#xff1a;每个节点的值总是小于或者等于其任意子节点…

内存和函数

程序的内存布局 Linux默认情况下将高地址的1GB空间分配给内核&#xff0c;用户进程使用剩下2GB或者3GB的内存空间。在用户空间里&#xff0c;也有很多地址区间有特殊的地位&#xff0c;一般来讲&#xff0c;应用程序使用的内存空间里有如下"默认"的区域 1、栈&#…

控制算法-模型预测MPC

本文记录一下MPC控制算法的学习过程和自己的理解&#xff0c;初步接触控制算法&#xff0c;理解肯定不是很完善&#xff0c;重在记录思考的过程。 背景 随着自动驾驶技术以及机器人控制技术的不断发展及逐渐火热&#xff0c;模型预测控制(MPC)算法作为一种先进的控制算法&…

【云原生 | Kubernetes 实战】04、k8s 名称空间和资源配额

目录 一、什么是命名空间&#xff1f; 二、namespace 应用场景 三、namespacs 使用案例 四、namespace 资源限额 一、什么是命名空间&#xff1f; Kubernetes 支持多个虚拟集群&#xff0c;它们底层依赖于同一个物理集群。 这些虚拟集群被称为命名空间。 命名空间namespace…

【计算机网络】数据链路层:使用广播信道的数据链路层(1)

局域网的数据链路层 局域网特点&#xff1a;网络为一个单位所拥有&#xff0c;地理范围和站点数目均有限。 地理范围和站点数目均有限。 局域网优点&#xff1a; 具有广播功能&#xff0c;从一个站点可以很方便地访问全网。 便于系统的拓展和演变&#xff0c;各设备的位置…

AtCoder Beginner Contest 279 F BOX 并查集 (大意失荆州

前言 赛时一直RE&#xff0c;思路很清晰&#xff0c;不知道RE哪里。。qwq 赛后开断点发现&#xff0c;map的大小不变&#xff0c; 最后发现是一个if条件写错了&#xff0c;寄。 不知道为什么会想起 银河英雄传说 题意&#xff1a; 初始n个盒子&#xff0c;盒子iii放着编号为i…

C++标准库分析总结(十)——<仿函数/函数对象>

目录 1.functor仿函数简介 2 仿函数的分类 3 仿函数使用 4 仿函数可适配的条件 1.functor仿函数简介 仿函数是STL中最简单的部分&#xff0c;存在的本质就是为STL算法部分服务的&#xff0c;一般不单独使用。仿函数&#xff08;functors&#xff09;又称为函数对象&…

第三十八篇 Vue中封装Swiper组件 2.0

上一篇内容讲到封装Swiper组件的一个过程&#xff0c;如果是静态的数据封装组件初始化在mounted当中并无多大影响&#xff0c;但是这样封装的组件复用性较低或者可能只使用一次&#xff0c;那么在动态使用通过ajax请求数据需要面临的是swiper初始化过早的问题&#xff0c;在mou…

408考研科目《数据结构》第八章第一节:排序的基本概念和插入排序(直接插入排序,折半插入排序,希尔排序)

文章目录教程1.排序的基本概念1.1 排序算法的评价指标1.2 排序算法的分类2. 插入排序2.1 直接插入排序2.1.1 算法效率分析2.2 折半插入排序总结2.3 希尔排序 &#xff08;Shell Sort&#xff09;总结教程 排序&#xff1a; https://www.bilibili.com/video/BV1b7411N798/?p77…

VsCode 配置eslint,支持typescript的语法检查,及时发现低级语法错误,包括函数未定义等行为

背景 最近学习cocos的小游戏制作&#xff0c;参考游戏管理器的代码进行调试的时候&#xff0c;发现自己运行的结果一直都是跟官方效果不一样&#xff0c;没有自动生成更多的方块。肉眼检查代码差异&#xff0c;基本上代码是一样的&#xff0c;浏览器页面调试的时候也看不出问题…

MyBatis ---- 搭建MyBatis

MyBatis ---- 搭建MyBatis1. 开发环境2. 创建maven工程a>打包方式&#xff1a;jarb>引入依赖3. 创建MyBatis的核心配置文件4. 创建mapper接口5. 创建MyBatis的映射文件6. 通过junit测试功能7. 加入log4j日志功能a>加入依赖b>加入log4j的配置文件1. 开发环境 IDE&a…

人工智能轨道交通行业周刊-第24期(2022.11.21-11.27)

追风赶月莫停留&#xff0c;平芜尽处是春山。 --《田歆华夏说》 本期关键词&#xff1a;BIM应用、地铁控制中心、车辆检修智能化、模型轻量化、隧道通风 1 整理涉及公众号名单 1.1 行业类 RT轨道交通中关村轨道交通产业服务平台人民铁道世界轨道交通资讯网铁路信号技术交…

Redis最全详解(一)——基础介绍

Redis介绍 redis是基于内存可持久化的日志型、Key-Value数据库。redis安装在磁盘&#xff0c;但是数据存储在内存。非关系型数据库NoSql。开源免费&#xff0c;遵守BSD协议&#xff0c;不用关注版权问题。 redis作者github&#xff1a;github.com/antirez redis是一种基于键…

idea如何快速找到项目中对应的类(包括源码)

文章目录1. 前言2. 先说结论3. idea的全局搜索功能 MethodValidation4. 搜索spring源码(例子)1. 前言 最近在看某些功能的时候&#xff0c;会去看对应的源码&#xff0c;而有时候只知道类名&#xff0c;不知道从哪里进入源码&#xff0c;因此就比较好奇&#xff0c;idea的全局…

FFmpeg进阶: 截取视频生成gif动图

文章目录1.封装视频滤镜2.截取视频生成gif3.gif优化4.示例效果现在互联网上很多人都通过表情包来表达自己的情绪&#xff0c;常用的表情包很多都是视频文件的一部分。这里就介绍一下如何通过ffmpeg截取视频生成gif动图。其实原理很简单&#xff0c;首先我们seek到视频对应的位置…

【Java面试】List接口

文章目录Iterator 和 ListIterator 有什么区别&#xff1f;遍历一个 List 有哪些不同的方式&#xff1f;每种方法的实现原理是什么&#xff1f;Java中List 遍历的最佳实践是什么&#xff1f;说一下 ArrayList 的优缺点如何实现数组和 List 之间的转换&#xff1f;ArrayList 和 …