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

🏙哈喽,大家好,我是小浪。那么从今天开始,我就要开始更新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有个初步的认识,后续持续渐进的进行学习,欢迎阅读,感谢订阅!📬📬

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

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

相关文章

全网最详细,性能测试各种测试场景分析+性能测试基准测(超细总结)

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 面对日益复杂的业…

生成一个手绘图为底图的导游图

目录 1 前言 2 新增一个景区 3 生成验证码用于上传手绘图切片 4 免费下载切图客户端并配置、切图 5 增加景点 1 前言 上一篇演示了制作一个简版导游图。简版导游图的优点是制作简单、快速&#xff0c;不需要第三方软件&#xff0c;缺点是略显简陋、不够专业。 本编介绍制…

【Linux】信号概述

目录 1、信号概念2、Linux常用信号表3、信号的5种默认处理动作 橙色 1、信号概念 信号是 Linux进程间通信的最古老的方式之一&#xff0c;是事件发生时对进程的通知机制&#xff0c;有时也称之为软件中断&#xff0c;它是在软件层次上对中断机制的一种模拟&#xff0c;是一种…

两小时搭建属于自己的chatGPT(ChatGLM)免硬件(白嫖)

目录 准备&#xff08;注册&#xff09;: 搭建: API模式: 测试&#xff1a; 总结&#xff1a; 准备&#xff08;注册&#xff09;: 注册modelscope(白嫖)免费使用服务器 https://modelscope.cn/ 按照图片里的选择(选择其他好像不能创建成功) 可以白嫖60多个小时的配置 8…

新星计划 Electron+vue2 桌面应用 1 基础

/(ㄒoㄒ)/~~报名了两个新星计划&#xff0c;工作之余写博客…… 另外一个是uniapp的属于个人兴趣&#xff0c;这个桌面应用正好符合工作需要。 活动地址&#xff1a;https://marketing.csdn.net/p/1738cda78d47b2ebb920916aab7c3584 教程地址&#xff1a; 2023新星导师活动…

基于FPGA+JESD204B 时钟双通道 6.4GSPS 高速数据采集设计(三)连续多段触发存储及传输逻辑设计

本章将完成数据速率为 80MHz 、位宽为 12bits 的 80 路并行采样数据的连续多 段触发存储。首先&#xff0c;给出数据触发存储的整体框架及功能模块划分。然后&#xff0c;简介 MIG 用户接口、设置及读写时序。最后&#xff0c;进行数据跨时钟域模块设计&#xff0c;内存…

【瑞萨RA系列FSP库开发】RASC+Keil的环境搭建

文章目录 一、获取资源包二、安装 Keil 软件、RA 芯片包和 RASC三、RASC 集成到 Keil四、使用 RASC 生成 Keil 工程五、通过 Keil 打开 RASC 的 FSP 配置器界面六、配置和编译 Keil 工程七、使用调试器下载程序 本节将介绍如何在Keil上开发瑞萨RA MCU &#xff08;如需了解 e2 …

百汇BCR:十个外汇交易常见问题解析

外汇交易是一种受到市场欢迎的投资方式&#xff0c;参与交易很容易&#xff0c;但想要盈利却很难。特别是一些细节问题容易被忽略&#xff0c;百汇BCR小编整理了十个外汇交易常见问题供有需要的投资者借鉴学习。 问题一、外汇开户需要哪些资料&#xff1f; 个人相关信息资料、…

20 KVM管理虚拟机-虚拟机生命周期示例

文章目录 20 KVM管理虚拟机-虚拟机生命周期示例20.1 创建虚拟机20.2 启动虚拟机20.3 重启虚拟机20.4 关闭虚拟机20.5 销毁虚拟机 20 KVM管理虚拟机-虚拟机生命周期示例 本节给出虚拟机生命周期管理相关命令的示例。 20.1 创建虚拟机 虚拟机XML配置文件为openEulerVM.xml # …

Windows批处理指令

前言 批处理文件&#xff08;batch file&#xff09;包含一系列 DOS 命令&#xff0c;通常用于自动执行重复性任务。用户只需双击批处理文件便可执行任务&#xff0c;而无需重复输入相同指令。编写批处理文件非常简单&#xff0c;但难点在于确保一切按顺序执行。编写严谨的批处…

使用mkdocs快速部署上线静态站点到Github

背景 mkdocs是一种方便地生成站点的工具&#xff0c;相比hugo、hexo等个人博客而言&#xff0c;mkdocs更加简便、轻量级&#xff0c;可以快速帮助部署上线类似个人技术本&#xff08;notebook&#xff0c;wiki&#xff09;之类的站点。并且支持默认支持站点内搜索&#xff0c;…

基于SSM的网上宠物店

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

网络基础进阶

1、交换机接口类型 Console口&#xff1a;也称为&#xff1a;串口接口&#xff0c;一般用于与PC连接&#xff0c;用于配置和监控交换机。百兆以太网接口&#xff1a;用于连接计算机和交换机之间的通信。Console到的网络接口&#xff1a;俗称交叉串口&#xff0c;是用于连接交换…

微信小程序xr-frame实现多光源效果

1.基础知识&#xff1a; 灯光 灯光组件Light用于给场景提供照明&#xff0c;也是阴影的核心。相机组件一般被代理到灯光元素XRLight中使用&#xff0c;其派生自XRNode&#xff0c;对应在xml中的标签为xr-light。 主光源以及参数 类型uniforms宏说明书写环境光颜色和亮度u_a…

2023年门店管理系统如何选?简单好用的门店管理系统有哪些?

开单收银效率低、商品管理混乱、记账对账耗时耗力还易出错...... 是我们在进行门店管理过程中常见的问题。 为了改善门店管理遇到的这几大问题&#xff0c;提高门店管理效率&#xff0c;越来越多的门店开始使用门店管理系统。 但如何选择简单实用、性价比高的门店管理系统&…

template和component自定义组件之间的区别

在小程序中自定义组件 component 方式和组件模板 template 2种方式实现页面组件化。 一、component自定义组件 1.概念 自定义组件是指可以被多个页面使用的组件&#xff0c;可以在小程序中多次复用。在开发中可以将一个页面中的代码和样式抽象出来&#xff0c;然后创建一个自定…

springboot缓存

1. 认识缓存 一级缓存 - 缓存是一种介于数据永久存储介质与数据应用之间的数据临时存储介质 - 使用缓存可以有效的减少低速数据读取过程的次数&#xff0c;提高系统性能 Service public class BookServiceImplCache implements BookService {Autowiredprivate BookDao book…

Java | 一分钟掌握定时任务 | 3 - 单机定时之Timer

作者&#xff1a;Mars酱 声明&#xff1a;本文章由Mars酱原创&#xff0c;部分内容来源于网络&#xff0c;如有疑问请联系本人。 转载&#xff1a;欢迎转载&#xff0c;转载前先请联系我&#xff01; 介绍 这个是个JDK远古时代的api了&#xff0c;据考证&#xff0c;可以追溯到…

(2)数码管

LED数码管:数码管是一种简单、廉价的显示器&#xff0c;是由多个发光二极管封装在一起组成"8"字器件 51单片机是共阴极连接 74HC245这个芯片有什么作用呢&#xff1f;解&#xff1a;这个芯片被称之为双向数据缓冲器这个芯片的作用&#xff0c;用来进行数据缓冲(提高驱…

如何在 Python 开发环境中调用 ChatGPT 模型?

本文将演示在本地的 python 项目中调用 ChatGPT 模型 前言 作为一名程序员&#xff0c;在开发过程当中时常需要使用 ChatGPT 来完成一些任务&#xff0c;但总是使用网页交互模式去 Web 端访问 ChatGPT 是很麻烦的&#xff0c;这时候我们可以使用代码来调用 ChatGPT 模型&…