【Spring框架全系列】第一个Spring程序

news2024/10/7 14:32:31

🏙哈喽,大家好,我是小浪。那么从今天开始,我就要开始更新spring框架全系列的博客了;本专栏免费阅读,最好能够点个订阅,以便于后续及时收到更新信息哈!🏟

📲目录

一、为什么要学习框架?

二、什么是Spring?

三、Spring的创建和使用

一、新建一个maven项目

二、添加Spring框架支持

三、存储Bean对象

四、将对象从spring中读取出来


一、为什么要学习框架?

🏕1、学习框架相当于从小作坊到工厂的升级,小作坊什么都要自己做,工厂是组件式装配,特点就是简单高效。

🗻2、框架的优势很明显,特点就是简单,易用,高效,这也是很多公司目前都使用框架的原因。

二、什么是Spring?

🚢我们通常所说的 Spring 指的是 Spring Framework(Spring 框架),它是⼀个开源框架,有着活跃而庞大的社区,这就是它之所以能长久不衰的原因。Spring ⽀持⼴泛的应⽤场景,它可以让 Java 企业级的应⽤程序开发起来更简单。
🚉一句话简单概括:Spring 是包含了众多⼯具⽅法的 IoC 容器。

三、Spring的创建和使用

🌠那么接下来,博主我通过创建maven项目的方式创建一个spring项目。

一、新建一个maven项目

1、首先打开idea,新建一个maven项目;

bea80a21bc1d4c579df0b31481823b31.png

2、点击next,选择项目的名称和存储路径;

3014fdf03cda451f8cf8097b6a7c9158.png

3、点击Finish,创建完成后目录结构应该是下面这个样子;

8403ec4fc8044941a3ce27cdb5b1740f.png

二、添加Spring框架支持

1、双击打开pom.xml文件;

3963c52254be49caa606e66bac3eb250.png

2、添加的框架有 spring-context:spring 上下⽂,还有 spring-beans:管理对象的模块。

    <dependencies>
        <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>
    </dependencies>

3、第一次添加的时候代码是红色的,还没有下载下来,我们可以找到右上角的maven,点击打开,然后点下面红色箭头指向的地方,下载框架支持。

9aefa89fdf4248d181d72172e240bbd1.png

4、下载完成后代码显示正常;

053f1fdeffa44e818d0f64be73f598d3.png

5、检查是否下载成功,找到Libraries这个目录,打开看是否有这两个对应的jar包;

27dbf44b89f2415a8e5689f221c4b774.png

上述步骤完成后,就可以开始下一步了;

三、存储Bean对象

1、在我们的java文件下新建一个普通的包com,在包com下面新建一个类"User",类名根据自己的喜好新建即可;

396cb53f10c74d31a0c1ff68feedb1e6.png

2、在类App中写上以下代码;

package com;

/**
 * 启动类
 */
public class User {
    public void sayHi(String name){
        System.out.println("hello- "+name);
    }
}

3、将Bean注册到容器

在创建好的项⽬中添加 Spring 配置⽂件 spring-config.xml,将此⽂件放到 resources 的根⽬录下,如下图所示:
a716daa10c7849d68cc0c8eab179e20c.png

配置文件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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

4、将bean通过配置文件注册到spring中

在上述"spring-config.xml"文件中添加一下代码即可;

<bean id="user" class="com.User"></bean>

注意这里的id是自己类名首字母小写之后的名字,class是类名所在的路径,刚才我们把Uesr类新建在com包下,所以这里给的是  class="com.User" ;即类名使用大驼峰,那么id就是类名的小驼峰,即类名为"User",那么id就是"user"。

四、将对象从spring中读取出来

1、首先我们需要得到spring上下文对象,在java文件下新建一个类“App”,这个类用来写读取对象的代码;

0b2b49f4451941bfa8e82e3d4d45702d.png

2、得到spring上下文对象;

方法1:使用ApplicationContext;

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

方法二、使用BeanFactory;

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

注意后面括号里面的名字一定要和我们配置的spring文件一致;

经典面试题:ApplicationContext和BeanFactory的区别是什么?

相同点:都可以从IoC容器当中获取bean。

不同点 :从继承关系和功能方面:ApplicationContext继承于BeanFactory。BeanFactory只提供了最基础的访问bean的方法,而ApplicationContext除了拥有BeanFactory以外,还拥有一些其他的机制,例如:支持国际化,资源访问,事件传播等;

从性能方面: ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,⽽BeanFactory 是需要那个才去加载那个,因此更加轻量(ApplicationContext采用的是"饿加载"的方式来进行加载的。而BeanFactory采用的是"懒加载"的方式来进行加载的。)

3、获取指定的Bean对象,根据上下文提供的getBean方法

方法一:

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

4、使用Bean对象

user.sayHi("ApplicationContext");

5、运行结果

6ff6d4bb2ee448abb643e545e74c541b.png

那么获取指定的Bean对象有很多种方法,刚才写的这一种我们发现需要强制类型转换,那么如何传递一个null值的话就会出现问题,idea就会报错,如何解决呢?

这里我们可以使用第二种方法来获取Bean对象;

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

我们可以直接传递User.class;

但是这种方法的话,当同一个类型被注入到spring当中多次的时候,就会出现问题;

b035ccac277948c0be1ed4968192a2eb.png

报错信息提示,匹配到了两个user;

1847bec90aab477fadf2a07bb61b9b26.png

那有没有其他的解决方案呢?

我们根据bean name 和类型来获取bean;

User user2 = context.getBean("user",User.class);
user3.sayHi("根据bean的id和bean的类型获取bean");

运行结果:

502269b6cdc7408ebe30e8787ec802f9.png

🌄OK,今天的内容就到这里啦,我们刚开始先对spring有个初步的认识,后续持续渐进的进行学习,欢迎阅读,感谢订阅!📬📬

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

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

相关文章

【Java EE 初阶】线程的常用方法

目录 1.多线程的作用 2.示例&#xff1a;分别对两个变量实现10亿次自增 1.使用串行&#xff08;单线程&#xff09; 2.使用并行&#xff08;多线程&#xff09; 结果显示&#xff1a; 3.线程的类构造方法 代码展示&#xff1a; 4.Thread类的常见属性 1.演示各个属性 2.演…

( 数组和矩阵) 378. 有序矩阵中第 K 小的元素 ——【Leetcode每日一题】

❓378. 有序矩阵中第 K 小的元素 难度&#xff1a;中等 给你一个 n x n n x n nxn 矩阵 m a t r i x matrix matrix &#xff0c;其中每行和每列元素均按升序排序&#xff0c;找到矩阵中第 k 小的元素。 请注意&#xff0c;它是 排序后 的第 k 小元素&#xff0c;而不是第 …

InnoDB存储引擎B+树的树高推导

目录 一、基本结论&#xff1a;InnoDB存储引擎B树的树高3-4层 二、存储引擎B树结构简单分析 三、主键索引B树推导 四、InnoDB页的内部结构推导 五、剖析InnoDB数据文件推导 六、一般思路推导计算B树高度总结 参考文献、书籍及链接 一、基本结论&#xff1a;InnoDB存储引…

uni-app实战笔记

3 页面跳转 点击【成员列表】进入到子页面&#xff0c;这里就涉及到页面跳转。 路由是基础并不难&#xff0c;但是路由跳转的方式比较灵活&#xff0c;这里就需要记录一下。有一点是需要配置的&#xff0c;就是在pages.json中需要将路由整理好&#xff0c;否则页面是无法跳转的…

Hive架构原理以及部署教程

◆了解Hive架构原理 ◆了解Hive和RDBMS的对比 Hive架构原理 Hive架构原理 - 知乎 Hive 是基于 Hadoop 的数据仓库工具&#xff0c;它提供了类 SQL 查询语言 HQL&#xff08;Hive Query Language&#xff09;&#xff0c;可以将 SQL 语句转化为 MapReduce 任务进行数据处理。 Hi…

【软考备战·希赛网每日一练】2023年5月2日

文章目录 一、今日成绩二、错题总结第一题 三、知识查缺 题目及解析来源&#xff1a;2023年05月02日软件设计师每日一练 一、今日成绩 二、错题总结 第一题 解析&#xff1a; 三、知识查缺 复习 流水线技术。序列图&#xff08;顺序图&#xff09;用于展现系统中一个用例和多…

剪枝与重参第九课:DBB重参

目录 DBB重参前言1. DBB2. DBB的六种变换2.1 Transform I: a conv for conv-BN2.2 Transform II&#xff1a;a conv for branch addition2.3 Transform III&#xff1a;a conv for sequential convolutions2.4 Transform IV&#xff1a;a conv for depth concatenation2.5 Tran…

【SpringBoot】 整合RabbitMQ 消息单独以及批量的TTL

生产者端 目录结构 导入依赖 修改yml 业务逻辑 队列消息过期 消息单独过期 TTL&#xff08;Time To Live&#xff09;存活时间。表示当消息由生产端存入MQ当中的存活时间&#xff0c;当时间到达的时候还未被消息就会被自动清除。RabbitMQ可以对消息单独设置过期时间也可以对…

爬虫 - QS世界大学排名数据

爬虫 - QS世界大学排名数据 网站简介爬虫方法概述使用工具爬虫概述 第一部分导入需要用到的python包设置selenium控制浏览器打开网页控制鼠标操作定位节点 提取数据滚轮翻页构建循环自动爬取数据数据储存 第二部分导入需要用到的python包获取网页设置请求头读取链接获取网页信息…

TIM-定时器——STM32

TIM-定时器——STM32 TIM(Timer)定时器 定时器可以对输入的时钟进行计数&#xff0c;并在计数值达到设定值时触发中断 16位计数器、预分频器、自动重装寄存器的时基单元&#xff0c;在72MHz计数时钟下可以实现最大59.65s的定时 不仅具备基本的定时中断功能&#xff0c;而且还包…

K8S第二讲 Kubernetes集群简易版搭建步骤

Kubernetes集群搭建步骤 1&#xff1a;准备物理或虚拟机器 为Kubernetes集群准备物理或虚拟机器。至少需要一个控制节点&#xff08;Master Node&#xff09;和一个工作节点&#xff08;Worker Node&#xff09;&#xff0c;建议使用Linux操作系统。 2&#xff1a; 安装Dock…

1987-2021年全国各省进出口总额数据含进口总额和出口总额

1987-2021年全国各省进出口总额数据含进口和出口 1、时间&#xff1a;1987-2021年 2、范围&#xff1a;包括全国30个省不含西藏 3、指标&#xff1a;进出口总额、进口总额、出口总额 4、单位&#xff1a;万美元 5、来源&#xff1a;各省NJ、JIN rong统计NJ 6、缺失情况说…

递归算法及经典例题详解

大部分人在学习编程时接触的第一个算法应该就是递归了&#xff0c;递归的思想其实很好理解&#xff0c;就是将一个问题拆分为若干个与本身相似的子问题&#xff0c;通过不断调用自身来求解。 但很多新手在实际操作中却很难正确使用到递归&#xff0c;有时面对问题还会有种无从…

win7下java环境搭建以及jdk环境变量配置

很多人在搭建页游、手游时候经常遇到JAVA闪退,基本都是环境变量或者路径错误导致的。本章节主要讲解在win7系统环境下,java环境变量配置方法,java环境配置正确,才可以对apk程序进行反编译运行页游手游。其他操作系统环境变量大同小异参考下就会了。 安装教程: 1、直接运…

让语言学习更简单的 WordFlow

作为一个英语并不是那么特别好的计算机专业学生&#xff0c;长期积累英语的学习对个人发展还是有意义的。简单来说&#xff0c;我在语言上最大的两个问题&#xff0c;一个自己「不理解」&#xff0c;另一个是自己「不会表达」。 上述两个问题主要体现在口语层面&#xff0c;而…

1997-2021年全国30省技术市场成交额(亿元)

1997-2021年全国30省技术市场成交额 1、时间&#xff1a;1997-2021年 2、范围&#xff1a;30省不含西藏 3、来源&#xff1a;国家统计J 4、指标&#xff1a;技术市场成交额 5、缺失情况说明&#xff1a;无缺失 6、指标解释及用途&#xff1a; 技术市场成交额是一个客观、…

YOLOv5 训练自己的数据集

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊|接辅导、项目定制 ● 难度&#xff1a;夯实基础⭐⭐ ● 语言&#xff1a;Python3、Pytorch3 ● 时间&#xff1a;5月1日-5月6日 &#x1f37a;要求&#xff1…

基于C#开发 B/S架构的实验室管理系统 云LIS系统(MVC + SQLserver + Redis)

一、云LIS系统是将各种样本、免疫、临检、放免、及实验用的分析仪器&#xff0c;通过网络管理和传输实验分析过程中全部数据。对每一专业&#xff0c;实现检验申请、样本采集、样本核收、联机检验、质量控制、报告审核到报告发布的全环节的信息化管理平台。 二、基于B/S架构的云…

【SpringMVC】| SpringMVC注解式开发

目录 一&#xff1a;SpringMVC注解式开发 1. RequestMapping定义请求规则 2. 五种数据提交的方式 3. 请求参数中文乱码解决 4. action方法的返回值 5. SpringMVC的四种跳转方式 6. SpringMVC支持的默认参数类型 7. 日期处理 8. 标签的使用 9. 资源在WEB-INF目录下 一…

常见三种编码方式

常见三种编码方式 1. one-hot 编码2. 虚拟编码3. 效果编码 最近复习一些书&#xff0c;记录一下。在特征工程中&#xff0c;数据集经常会出现分类变量&#xff0c;这时候的分类变量可能是字符型&#xff0c;通常不能直接用于训练模型&#xff0c;这时需要对分类变量进行编码&am…