Spring之最基础的创建与Bean的存储与获取(还有Maven加载jar包报错的解决方法)
目录
创建Spring项目
如何解决Maven加载jar包报错
存储Bean和取Bean
在Java中对象也称为Bean。所以后面我提到Bean,大家要知道我说的是什么。
创建Spring项目
我的idea是2022版本的,如果大家和我一样可以参考我的。
1.创建一个Maven项目。图片上忘了介绍,JDK下面有个勾选的地方,Add sample code这个我们不要勾选,勾选了就会给我们增加示例代码。

大家加载完成后,没问题的话应该和我这个一样:

如果很多人的加载不完,一直转圈,或者有的人的直接报错,大家可以按照下面的内容进行修改然后再重新加载。
2.此时,我们的项目还并不是一个Spring项目,我们需要在pom.xml中导入Spring依赖,我的JDK为8的,所以导入的Spring依赖不能为6开头的。写完之后,我们不要忘记点击右上角更新我们的maven仓库。
<dependencies><!--导入Spring依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.37</version></dependency></dependencies>
3.更新完maven仓库后,此时,我们的项目才可以称为Spring项目。
如何解决Maven加载jar包报错
由于Maven是从国外的服务器上下载jar包,当超过一定时间还没有下载完成,那自然会进行报错,我们需要配置国内镜像,请大家根据我的步骤来进行操作。
1.修改当前项目的maven。

2.点击setting,然后查找Maven,修改路径。修改完成后,我们点击APPLY再点击OK。注意!我们在里面设置了setting.xml,我们就必须存在这个文件,否则就报错了!

3.按照和第二步骤同样的方法,找到新建项目中的maven,去修改对应路径,此时修改的是全局的maven路径,每次我们创建了新项目后,路径都是这个,就不用每次都进行修改了。这个每个版本不一样,所在地方不同,大家自己找找哈。
4.如果大家不存在settings.xml文件,大家可以来管我要,我给你们我的一个,直接粘贴到对应的位置上就行,如果大家都有settings.xml,那么我们接下来就要配置镜像源了。在文件中找到mirrors的地方,镜像的代码存进去。
<mirror><id>alimaven</id><name>aliyun maven</name><url>http://maven.aliyun.com/nexus/content/groups/public/</url><mirrorOf>central</mirrorOf></mirror>

然后保存起来,此时我们重新加载我们项目中的maven。应该就没问题了。

存储Bean和取Bean
我们创建好Spring后,我们得把我们要Spring帮我们创建的对象告诉Spring,要不他不知道哪些类交给Spring管理了,哪些类不用它管理。
1.首先我们先创建一个学生类。
public class Student {public void study() {System.out.println("学生们在学习!!!");}
}
2.这个类我不想自己创建对象,我想交给Spring帮助我们完成,我们首先需要创建一个配置文件。
配置文件resources文件中,配置文件名字我们可以自己随便起,但是后缀名必须为xml。


3.在我们创建好的配置文件中,把下面这段代码粘贴过去。
<?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>
4.将我们的Bean(学生类)存入到Spring中。

5.创建一个启动类(就是在这个类里面去获取对象)。
(1)首先获取Spring上下文对象,有两种方式
//方式一:
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");//方式二:
BeanFactory beanFactory = new XmlBeanFactory( new ClassPathResource("spring-config.xml"));//两种方式后面括号中存放的是我们配置文件的名字。
两者最终实现的效果一样,但是两者之间也存在区别。(面试题可能会考)
A.ApplicationContext和BeanFactory两者之间存在父子关系,前者是后者的子类。
B.BeanFactory提供了基础的访问容器的能力,既然ApplicationContext是BeanFactory的子类,那么就代表ApplicationContext也具备访问容器的能力,但是ApplicationContext除了具备了BeanFactory的功能外还具备了自己独特的功能:资源的支持,国际化的支持等。
C.这点区别也算最重要的!!BeanFactory在程序开始执行的时候,不会将配置文件中存放到容器的Bean全部加载了,只是需要哪个就加载哪个,而ApplicationContext则是配置文件中不管有多少Bean存放到Spring中,都是一次性的将所有的Bean加载并初始化。
(2)通过上下文对象取出我们的存入到Spring中的Bean对象。(这里我用的是ApplicationContext获得上下文对象,一般也是用这个)
会调用getBean方法获取相应的对象。这个getBean方法进行了重载,所以有三种形式。大家看下面的代码
//通过上下文对象获取到bean对象//方式一:通过存入的id来取出对象//id是我们在配置文件中<bean>标签中设置的id要对应上!由于getBean()返回类型为Object,所以要强转。Student student = (Student) context.getBean("student");//方式二:通过类取出对象,后面括号中填写的是类名.class,getBean(类.class)返回的就是对应的类,不用强转Student student1 = context.getBean(Student.class);//方式三(建议大家都采用这种):通过id和类取出对象Student student2 = context.getBean("student",Student.class);
A.当我们采用类名的时候,会有弊端,当我们同一个Bean类,我们存入Spring多次,每次都起不同的名字,当我们通过类访问的时候会报错。(因为它不唯一,Spring不知道你想用哪个)

B.当我们用id访问对象的时候,如果我们类少的时候,可以保证id可能不会重复,当我们有很多的时候,我们可能会造成id重复,此时访问也会报错。原因就是,你不同类采用了同样的id,Spring怎么知道你实际想用的哪个呢?

C.所以为了rangSpring更加清楚的知道我们究竟想用哪个Bean对象,我们最好采用第三种方式。
(3)我们从Spring中获得了对象后,我们就可以运用了,操作对象中的属性或方法等。
相关文章:
Spring之最基础的创建与Bean的存储与获取(还有Maven加载jar包报错的解决方法)
目录 创建Spring项目 如何解决Maven加载jar包报错 存储Bean和取Bean 在Java中对象也称为Bean。所以后面我提到Bean,大家要知道我说的是什么。 创建Spring项目 我的idea是2022版本的,如果大家和我一样可以参考我的。 1.创建一个Maven项目。图片上忘了…...
RabbitMQ应用问题 - 消息顺序性保证、消息积压问题
文章目录 MQ 消息顺序性保证概述原因分析解决方案基于 spring-cloud-stream 实现分区消费 消息挤压问题概述原因分析解决方案 MQ 消息顺序性保证 概述 a)消息顺序性:消费者消费的消息的顺序 和 生产者发送消息的顺序是一致的. 例如 生产者 发送消息顺序…...
linux tcp通讯demo
linux tcp通讯demo代码。通过用chatgpt生成的代码。做一个代码记录。 一、基本的通讯demo server.c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/socket.h>…...
在 MongoDB 中,如何配置副本集以实现读写分离?
在 MongoDB 中,配置副本集以实现读写分离主要涉及以下几个步骤: 初始化副本集: 创建副本集时,需要在所有参与节点上运行 rs.initiate() 命令。这将初始化一个新的副本集。 添加成员到副本集: 使用 rs.add() 命令将所有…...
虚拟dom-Diff算法
虚拟dom-Diff算法 vue2 diff算法在vue2中就是patch,通过新旧虚拟dom对比,找到最小变化然后进行dom操作 在页面首次渲染的时候会调用一次patch并创建新的vnode,不会进行深层次的比较,然后再组件中数据发生变化的时候,…...
01创建型设计模式——单例模式
一、单例模式简介 单例模式(Singleton Pattern)是一种创建型设计模式(GoF书中解释创建型设计模式:一种用来处理对象的创建过程的模式),单例模式是其中的一种,它确保一个类只有一个实例ÿ…...
图像分割(一)
一、概述 语义分割:是把每个像素都打上标签(这个像素点是人、树、背景等) 实例分割:不光要区别类别,还要区分类别中的每一个个体 损失函数:逐像素的交叉熵;样本均衡问题 MIOU指标:…...
C++ 新经典:设计模式 目录(先留框架,慢慢来~)
C 新经典:设计模式 C 新经典:设计模式 C 新经典:设计模式第1章 设计模式与软件开发思想、编程环境介绍第2章 模板方法模式第3章 工厂模式、原型模式、建造者模式第4章 策略模式第5章 观察者模式第6章 装饰模式第7章 单件模式第8章 外观模式第…...
go之命令行工具urfave-cli
一、urfave/cli urfave/cli 是一个声明性的、简单、快速且有趣的包,用于用 Go 构建命令行工具。 二、快速使用 2.1 引入依赖 go get github.com/urfave/cli/v2 2.2 demo package mainimport ("fmt""log""os""github.com/ur…...
四种应用层协议——MQTT、CoAP、WebSockets和HTTP——在工业物联网监控系统中的性能比较
目录 摘要(Abstract) 实验设置 实验结果 节选自《A Comparative Analysis of Application Layer Protocols within an Industrial Internet of Things Monitoring System》,作者是 Jurgen Aquilina、Peter Albert Xuereb、Emmanuel Francalanza、Jasmine Mallia …...
MySQL的脏读、不可重复读、幻读与隔离级别
脏读/不可重复读/幻读 脏读 脏读(Dirty Read)发生在一个事务读取了另一个事务尚未提交的数据。如果第二个事务失败并回滚,第一个事务读到的数据就是错误的。这意味着数据从一开始就是不稳定或者“脏”的。 举例 事务A读取了某条记录的值为X。事务B修改该记录的值…...
程序员前端开发者的AI绘画副业之路:在裁员危机中寻找新机遇
正文: 在这个充满变数的时代,作为一名前端开发者,我经历了行业的起伏,见证了裁员危机和中年失业危机的残酷。在这样的背景下,我开始了利用AI绘画作为副业的探索,不仅为了寻求经济上的稳定,更是为…...
Burp Suite的使用和文件上传漏洞靶场试验
第一步:分析如何利用漏洞,通过对代码的查阅发现,代码的逻辑是先上传后删除,意味着,我可以利用webshell.php文件在上传到删除之间的间隙,执行webshell.php的代码,给上级目录创建一个shell.php木马…...
如何在Ubuntu中安装deepin wine版的企业微信
如何在Ubuntu中安装deepin wine版的企业微信 运行如下一条命令将移植仓库添加到系统中 wget -O- https://deepin-wine.i-m.dev/setup.sh | sh自此以后,你可以像对待普通的软件包一样,使用apt-get系列命令进行各种应用安装、更新和卸载清理了。 安装企业…...
案例:Nginx + Tomcat集群(负载均衡 动静分离)
目录 案例 案例环境 案例步骤 部署Tomcat服务器 部署Nginx服务器 实现负载均衡和读写分离 日志控制 案例 案例环境 操作系统 IP 地址 角色 CentOS 192.168.10.101 Nginx服务器(调度器) CentOS 192.168.10.102 Tomcat服务器① CentOS 1…...
【密码学】密码协议的分类:②认证协议
密码协议的分类有很多种方式,这里我采取的是基于协议实现的目的来分类。可以将密码协议分成三类:认证协议、密钥建立协议、认证密钥建立协议。 一、认证协议是什么? 认证协议都在认证些什么东西呢?认证一般要认证三个东西&#x…...
异步编程(Promise详解)
目录 异步编程 回调函数 回调地狱 Promise 基本概念 Promise的特点 1.Promise是一种构造函数 2.Promise接收函数创建实例 3.Promise对象有三种状态 4.Promise状态转变不可逆 5.Promise 实例创建即执行 6.Promise可注册处理函数 7.Promise支持链式调用 Promise的静…...
DjangoORM注入分享
DjangoORM注入 简介 这篇文章中,分享一些关于django orm相关的技术积累和如果orm注入相关的安全问题讨论。 攻击效果同数据库注入 从Django-Orm开始 开发角度 Django ORM(Object-Relational Mapping)是Django框架中用于处理数…...
【HBZ分享】Redis各种类型的数据结构应用场景
String(字符串类型) 计数器: incr / decr, 比如商品库存,业务号的发号器业务数据key-value缓存, 缓存结果数据,提高网站性能,缓解DB压力分布式session会话, 集群环境下存储token鉴权信息分布式锁ÿ…...
anaconda创建并且配置pytorch(完整版)
📚博客主页:knighthood2001 ✨公众号:认知up吧 ** 🎃知识星球:【认知up吧|成长|副业】介绍** ❤️如遇文章付费,可先看看我公众号中是否发布免费文章❤️ 🙏笔者水平有限,欢迎各位大…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...
OpenLayers 分屏对比(地图联动)
注:当前使用的是 ol 5.3.0 版本,天地图使用的key请到天地图官网申请,并替换为自己的key 地图分屏对比在WebGIS开发中是很常见的功能,和卷帘图层不一样的是,分屏对比是在各个地图中添加相同或者不同的图层进行对比查看。…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
比较数据迁移后MySQL数据库和OceanBase数据仓库中的表
设计一个MySQL数据库和OceanBase数据仓库的表数据比较的详细程序流程,两张表是相同的结构,都有整型主键id字段,需要每次从数据库分批取得2000条数据,用于比较,比较操作的同时可以再取2000条数据,等上一次比较完成之后,开始比较,直到比较完所有的数据。比较操作需要比较…...
Vue3中的computer和watch
computed的写法 在页面中 <div>{{ calcNumber }}</div>script中 写法1 常用 import { computed, ref } from vue; let price ref(100);const priceAdd () > { //函数方法 price 1price.value ; }//计算属性 let calcNumber computed(() > {return ${p…...
HTTPS证书一年多少钱?
HTTPS证书作为保障网站数据传输安全的重要工具,成为众多网站运营者的必备选择。然而,面对市场上种类繁多的HTTPS证书,其一年费用究竟是多少,又受哪些因素影响呢? 首先,HTTPS证书通常在PinTrust这样的专业平…...
职坐标物联网全栈开发全流程解析
物联网全栈开发涵盖从物理设备到上层应用的完整技术链路,其核心流程可归纳为四大模块:感知层数据采集、网络层协议交互、平台层资源管理及应用层功能实现。每个模块的技术选型与实现方式直接影响系统性能与扩展性,例如传感器选型需平衡精度与…...
组合模式:构建树形结构的艺术
引言:处理复杂对象结构的挑战 在软件开发中,我们常遇到需要处理部分-整体层次结构的场景: 文件系统中的文件与文件夹GUI中的容器与组件组织结构中的部门与员工菜单系统中的子菜单与菜单项组合模式正是为解决这类问题而生的设计模式。它允许我们将对象组合成树形结构来表示&…...

