Spring创建和使用

news2024/11/25 22:42:11

日升时奋斗,日落时自省 

目录

1、创建Spring项目

1.1、创建Maven项目

1.2、添加Spring框架支持

1.3、添加启动类

2、存储Bean对象

2.1、创建Bean

2.2、将Bean注册到容器

3、获取并使用Bean对象

3.1、创建Spring上下文

3.2、获取指定的Bean对象

3.2.1、Id获取Bean对象

3.2.2、类名获取Bean对象

3.2.3、id加类名获取Bean对象

3.3、ApplicationContext与BeanFactory区别

3.3.1、功能区别

3.3.2、性能区别

4、总结


1、创建Spring项目

创建Spring项目我们使用的还是Maven方式来创建一个Spring项目,创建Spring项目和Servlet类似,步骤大体不会有很大的变化

<1>首先创建一个Maven项目

<2>添加Spring框架支持(这个一会会给友友们说怎么弄,并且这里会给大家提供)

<3>添加启动类

这里先给友友们说一下,我这里使用的是Idea2021版本的,可能界面可能会有所差异,如果感觉差异让人恐惧的话建议换成2021版本的Idea(让你我同步),其实也是因为好用。(挨个来)

1.1、创建Maven项目

 1.2、添加Spring框架支持

第一次创建好Maven需要稍微等等,等Maven加载完成

导入Spring的依赖 从中央仓库导入依赖(下面给了一个url就是中央仓库的)

Maven 存储库:搜索/浏览/探索 (mvnrepository.com)

 

注: 上述的操作步骤和Servlet添加依赖的步骤大体是一样的

1.3、添加启动类

启动类就是main方法的一个类,用于启动程(这里暂时创建下来也看不到啥结果,后面创建Bean对象以后在给友友们展示启动类代码)

2、存储Bean对象

存储Bean分为以下2步:

<1>存储Bean之前,先得有Bean才行,因此先要创建一个Bean

<2>创建Bean注册到Spring容器中

2.1、创建Bean

在创建之前,还有一个很重要的点,就是配置国内源,为了以后解决问题不配置之后,很多jar包就不能加载出来(如何配置国内源)

<1>有settings文件情况

添加国内源

   <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        <mirrorOf>central</mirrorOf>        
      </mirror>

<2>没有settings文件情况(去这里取)

settings文件

创建一个Bean对象,就是java中的一个普通对象,只是对象是从Spring中取出来的

2.2、将Bean注册到容器

在创建好的Maven项目中,还需要添加Spring的配置文件,文件名.xml (以.xml为后缀的配置文件),将此文件放到resource的根目录下(我们这里就给这个配置文件起一个比较专业的名字叫做spring-config.xml)

当然,这个名字你可以随便起,但是这样就不一定方便别人来看了

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

此时我们创建一个类来演示一下,如何将类对象注入到Spring中,其中会操作到bean标签(在刚刚Spring配置文件中)

 3、获取并使用Bean对象

获取并使用Bean对象,步骤分为3步,其实也就是三行关键代码

<1>得到Spring上下文对象,因为对象都交给Spring管理了,所以获取对象要从Spring中获取,首先我们就先要知道Spring的上下文(不是多高级的东西,就是Spring中都有啥,拿到配置文件,看看了里面都存了谁的类对象)

<2>通过Spring上下文,获取某一个指定的Bean对象

<3>使用Bean对象

3.1、创建Spring上下文

创建Spring上下文对象使用两个类,先拿当前比较常看见就是ApplicationContext代码如下

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

现在来解释这个代码:new 的对象是Applicationontext的一个子类,参数就是Spring配置文件(我们刚刚创建的那个文件)

还有另外一个类BeanFactory

创建方式有所不同(最后会对比这两个类)

BeanFactory context=new XmlBeanFactory(new ClassPathResource("spring-config.xml"));

3.2、获取指定的Bean对象

3.2.1、Id获取Bean对象

public class App {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
        User user=(User) context.getBean("user");
        user.sayHi();
    }
}

缺点:但是这个方法获取Bean对象并不保险(不安全的意思),如果Bean标签还是有id与其相同的类对象呢,那就会有问题

 3.2.2、类名获取Bean对象

 虽然看着很美观而且也解决了强转问题,但是仍然有问题

缺点:但是同一个类中可能有多个Bean对象,这样的话就报错了(这个错误来展示一下)

 3.2.3、id加类名获取Bean对象

User user=context.getBean("user",User.class);

public class App {
    public static void main(String[] args) {
        ApplicationContext context=new ClassPathXmlApplicationContext("spring-config.xml");
        User user=context.getBean("user",User.class);
        user.sayHi();
    }
}

优点:相当于前两个,算是一个综合版本的获取Bean对象,能够准确的拿到对应的Bean对象 

3.3、ApplicationContext与BeanFactory区别

3.3.1、功能区别

继承关系:两者成继承关系,BeanFactory是ApplicationContext的父类(这里来看一下相关的关系) 

 ApplicationContext优点:功能方面:除了继承了BeanFactory的所有功能之外,它还拥有了独特的特性,添加了国际化支持,资源访问支持,以及事件传播等方面的支持

3.3.2、性能区别

性能区别在于加载这块上,但是加载早了就比较费空间,但是现在不会太影响,因为空间确实很大,不够了也可以买,也不贵

 区别总结:ApplicationContext是一次性加载并初始化所有的Bean对象,而BeanFactory是需要那个才去加载那个,因此更加轻量

4、总结

总结一下操作的流程

 注:BeanFactory 和 ApplicationContext没有本质上的好坏,视情况而定使用,在不考虑空间的情况下,想快一点使用ApplicationContext,想节省空间,不是很注重执行速度可以考虑BeanFactory

提示:错别字可能影响观看,友友们评论点出,看见后立即修改

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

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

相关文章

2023 年 MQTT 协议的 7 个技术趋势|描绘物联网的未来

MQTT 是物联网消息传输标准协议&#xff0c;其采用极其轻量级的发布订阅消息模型&#xff0c;以可扩展、可靠且高效的方式连接物联网设备。 自 1999 年 IBM 发布 MQTT 以来已经过去了二十多年&#xff0c;而自 2012 年 EMQ 在 GitHub 上发布开源 MQTT 消息服务器 EMQX&#xf…

FVM链的Themis Pro,5日ido超百万美元

交易一直是 DeFi 乃至web3领域最经久不衰的话题&#xff0c;也因此催生了众多优秀的去中心化协议&#xff0c;如 Uniswap 和 Curve。这些协议逐渐成为了整个系统的基石。 在永续合约方面&#xff0c;DYDX 的出现将 WEB2 时代的订单簿带回了web3。其链下交易的设计&#xff0c;仿…

USRP简介

USRP定义 USRP为Universal Software Radio Peripheral缩写&#xff0c;即通用软件无线电外设&#xff0c;是由Ettus Research及其母公司National Instruments设计和销售的一系列软件定义无线电。 大多数USRP通过高速链路连接到主机&#xff0c;基于主机的软件用它来控制USRP硬…

一文吃透Http协议

Http 协议 1. 初始 Http Http 协议 , 是应用层最为广泛使用的协议 , Http 就是浏览器和服务器之间的桥梁. Http 是基于 TCP 协议实现的 , 通常我们输入搜索框中的网址 (URL) , 浏览器就会根据这个 URL 构造出一个 Http 请求 , 发送给服务器. 服务器就会返回一个 Http 响应(包…

立体图

[NOIP2008 普及组] 立体图 题目描述 小渊是个聪明的孩子&#xff0c;他经常会给周围的小朋友们讲些自己认为有趣的内容。最近&#xff0c;他准备给小朋友们讲解立体图&#xff0c;请你帮他画出立体图。 小渊有一块面积为 mnm \times nmn 的矩形区域&#xff0c;上面有 mnm \…

网络攻击与防御

1.什么是数据认证&#xff0c;有什么作用&#xff0c;有哪些实现的技术手段? 数字认证证书它是以数字证书为核心的加密技术可以对网络上传输的信息进行加密和解密、数字签名和签名验证&#xff0c;确保网上传递信息的安全性、完整性。 使用了数字证书&#xff0c;即使您发送的…

【Python爬虫项目实战一】获取Chatgpt3.5免费接口文末付代码(过Authorization认证)

目录 🚩前言🍑工具🍉分析流程🧅实战部分🧅🧅模拟登陆🧅🧅模拟提问请求🥒login方法🥒chatgpt方法🌰总结🚩前言 大家好!今天的目标是拿下Openmao的接口,他的接口内容和chatgpt3.5是一样的,它们的免责申明中写道:本站点基于外部API二次开发,仅供学习…

【数据结构学习2】线性表、顺序表、C/C++补充

目录线性表线性表的定义和特点线性表类型定义线性表的存储结构顺序存储结构顺序表基本操作的实现顺序表的查找算法分析&#xff1a;平均查找长度ASL(Average Search Length)顺序表的插入顺序表的删除补充 C/CC中的参数传递引用类型做形参的三点说明线性表 线性表的定义和特点 …

无需公网IP,远程连接SQL Server数据库【内网穿透】

文章目录1.前言2.本地安装和设置SQL Server2.1 SQL Server下载2.2 SQL Server本地连接测试2.3 Cpolar内网穿透的下载和安装2.3 Cpolar内网穿透的注册3.本地网页发布3.1 Cpolar云端设置3.2 Cpolar本地设置4.公网访问测试5.结语1.前言 数据库的重要性相信大家都有所了解&#xf…

gpt4人工智能怎么下载-chatgpt哪里下载

GPTChat是一种使用基于深度学习的自然语言处理模型&#xff08;GPT&#xff09;实现的智能对话系统。 GPT模型是一种Transformer模型&#xff0c;由OpenAI实现&#xff0c;可用于生成各种类型的文本&#xff0c;包括对话文本。 GPTChat通过对话实现用户与机器之间的交互。用户…

什么是美股市场?主要的美股交易市场有哪些?

美股市场就是交易股票的场所。美股交易市场不同&#xff0c;也影响着投资者在交易美股时的计划和安排。主要的美股交易市场包含哪些&#xff1f; 美股交易市场一、NYSE NYSE又称纽约证券交易所&#xff0c;是上市公司总市值第一&#xff08;2009年数据&#xff09;&#xff0c…

榜单!智能车控进入「新周期」,BCM份额TOP10供应商都有谁

作为控制车身不同功能及信号通信中转的ECU模块&#xff0c;从广义范畴来说&#xff0c;BCM&#xff08;Body Control Module&#xff09;实际上也是整车最早开始进入「域」整合的部件之一。比如&#xff0c;车身控制多功能的集成&#xff08;1.0&#xff09;、BCM网关&#xff…

Maven + Nexus 私有仓库搭建 + 项目推送 + 其他项目拉取(简记)

序 2022年是比较忙碌的一年&#xff0c;耽误了很多博客积累&#xff0c;这一年开始看的比写得多。后面也发现像原来一样的去写下来的成本太高。后面开始只做一些简记。即减少书写成本&#xff0c;也能巩固知识&#xff0c;提炼精华。 一 、Nexus下载 下载地址&#xff1a; N…

Dubbo知识【高级特性】

目录 1&#xff1a;Dubbo高级特性 1.1&#xff1a;超时与重试 什么是超时&#xff1f; 什么是重试&#xff1f; 如何配置超时与重试&#xff1a; 1.2&#xff1a;启动检查 1.3&#xff1a;多版本 1.4&#xff1a;负载均衡 1.5&#xff1a;序列化 1.6&#xff1a;地址…

夜深敲代码——记录一个优化过程

前言 最近一段时间OpenAI的热度一直不减&#xff0c;ChatGpt带来的极大便利性大家也是深有体会。荔枝也跟风搞了一个来玩玩&#xff0c;感觉还是很不错的哈哈哈哈。这不&#xff0c;最近开始刷题用ChatGpt帮忙找bug就很舒服&#xff0c;它甚至可以为我们提供优化的思路&#xf…

git使用手册——简单实用

常见命令 创建仓库 git init初始化仓库git clone拷贝一份远程仓库&#xff0c;也就是下载一个项目。提交与修改 git add添加文件到仓库git status查看仓库当前的状态&#xff0c;显示有变更的文件。git diff比较文件的不同&#xff0c;即暂存区和工作区的差异。git commit提…

RGB与YUV

什么是YUV YUV也叫YCbCr模型&#xff0c;是相对于RGB模型的一种广泛使用的颜色表示模型&#xff0c;YUV格式是1938年由一个法国通信工程师M. Georges Valensi发明的。 YUV中的Y表示亮度luminance&#xff0c;UV表示色度chrominance&#xff1b; 我们知道人眼是个复杂的器官&a…

vue2.x 学习笔记

div标签&#xff08;HTML&#xff09; div标签的作用是&#xff0c;设定字、画、表格等的摆放位置。 DIV元素&#xff0c;是用来为HTML文档内大块&#xff08;block-level&#xff09;的内容提供结构和背景的元素。 DIV标签&#xff0c;称为区隔标记。 什么是vue vue是响应式…

天猫商品详情数据接口,京东商品详情数据接口,品牌商品数据分析,品牌店铺商品数据分析,监控商品价格销量接口代码封装教程

最近做一个品牌电商公司内部ERP系统分发的采集淘宝、天猫、京东商品详情页API接口的投标工作&#xff0c;集成的接口&#xff0c;其中有一个需求就是监控品牌授权店铺的价格、销量&#xff0c;标题、主图等等&#xff0c;具体需求如下描述&#xff1a;所有授权店铺的公开数据都…

04、SpringBoot运维实用篇

一、配置文件1、临时属性设置目前我们的程序包打好了&#xff0c;可以发布了。但是程序包打好以后&#xff0c;里面的配置都已经是固定的了&#xff0c;比如配置了服务器的端口是8080。如果我要启动项目&#xff0c;发现当前我的服务器上已经有应用启动起来并且占用了8080端口&…