【Spring】Spring的简单创建和使用

前言

Spring Bean 可以通过两种主要方式定义:基于 XML 配置文件和基于注解。今天我们讲解基于 XML 配置文件‌来定义 Bean ,在 XML 配置文件中,使用 <bean> 元素定义 Bean,描述 Bean 的创建、配置和依赖关系,并存储与使用。


目录

1. Spring项目的创建

1.1 创建一个Maven项目

1.2 添加Spring框架的支持(添加pom.xml文件)

1.3 添加Sping的配置文件

2. Spring的使用

2.1 存储Bean对象

2.2 获取Bean对象

2.3 使用Bean对象

2.4 ApplicationContext与BeanFactory的区别


1. Spring项目的创建

1.1 创建一个Maven项目

第一步

第二步

第三步


1.2 添加Spring框架的支持(添加pom.xml文件)

创建好 Spring 项目后,项目里面会默认出现一个 pom.xml 文件,我们需要把 Spring 的框架支持添加进去,也就是将以下代码复制到 pom.xml

注意,在 pom.xml 添加框架支持是为了简化项目依赖管理和提高开发效率

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


1.3 添加Sping的配置文件

添加 Spring 的配置文件,我们通常把这个配置文件命名为 spring-config.xml 并且把该文件创建到 resources 文件夹中。后面,我们将也是 Bean 对象注册到该配置文件里面。

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


2. Spring的使用

2.1 存储Bean对象

  1. 为了存储 Bean 对象首先我们得要有一个 Bean 对象
  2. 将创建好的 Bean 对象存储到 Spring 容器当中

首先,我们在 java 底下创建一个包,并在包里面创建一个 Student 类,此时的 Student 类就是一个我们创建好的 Bean 对象。:

package com.study.spring;

public class Student {
    public void hello() {
        System.out.println("welcome use Student!");
    }
}

其次,在 java 底下创建一个启动类 App,如下如所示:

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

    }
}

最后,我们将上面创建的 Bean 对象存储到 Spring 容器当中,也就是我们创建的 spring-config.xml(spring配置文件) 之中。

我们打开 spring-config.xml 并通过 <bean></bean> 标签来存储。

<?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="student" class="com.study.spring.Student"></bean>
</beans>

其中 id 为我们后面获取 Bean 对象所设置的一个名称(任意起名),class 为这个 Bean 对象所在的位置。


2.2 获取Bean对象

  1. 为了获取到 Bean 对象,我们就得获取到 Spring 的上下文,因为我们将 Bean 对象交给 Spring 管理了,可通过 ApplicationContext BeanFactory 来获取。
  2. 可用过 <bean></bean> 标签中的 id 来获取到一个指定的 Bean 对象。

2.3 使用Bean对象

在启动类中,通过 ApplicationContext 来获取 Spring 上下文并使用。

import com.study.spring.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class App {
    public static void main(String[] args) {
        // 1.获取 Spring 的上下文对象
        ApplicationContext context = new
                ClassPathXmlApplicationContext("spring-config.xml");
        // 2.加载到 id 为 student 的 Bean 中
        Student student = (Student) context.getBean("student");
        // 3.运行 Student 类中 hello 方法
        student.hello();
    }
}

结果如下:

使用 ApplicationContext 为获取 Spring 上下文对象的方法。ClassPathXmlApplicationContext("spring-config.xml")为加载一个名为 spring-config.xmlSpring 配置文件。 


通过  BeanFactory 来获取 Spring 上下文

public class App {
    public static void main(String[] args) {
        // 1.获取 Spring 的上下文对象
        BeanFactory beanFactory = 
                new XmlBeanFactory(new ClassPathResource("spring-config.xml"));
        // 2.加载到 id 为 student 的 Bean 中
        Student student = (Student) beanFactory.getBean("student");
        // 3.运行 Student 类中 hello 方法
        student.hello();
    }
}

结果如下:


2.4 ApplicationContext与BeanFactory的区别

  • 从继承关系和功能方面:Spring 容器有两个接口即 BeanFactory 和 ApplicationContext。其中 BeanFactory 提供了基础的访问容器的功能,而 ApplicationContext 为 BeanFactory 的子类,它继承了 BeanFactory 的所有功能之外,还添加了对国际化的支持、资源访问、以及事件传播等等方面的支持。
  • 从性能来说:ApplicationContext 是一次性加载并初始化所有的 Bean 对象,而BeanFactory 是需要那个就加载那个,因此更轻量。

以上就是今天的博客内容,下期我们讲解更加简单的存储与使用 Bean 对象。

🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者

🤼文章收录于:Spring

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

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

相关文章

二次封装 el-pagination 组件存在的问题

在使用 Element Plus 组件时&#xff0c;有时会遇到组件不完全符合需求的情况&#xff0c;这时可能需要对其进行二次封装。在封装 Pagination 组件时&#xff0c;我们会发现一些属性和函数无法正常使用&#xff0c;下面将详细探讨这些问题&#xff0c;并提供一下思路和想法。 …

想唱就唱 2.15.63| 电视免VIP唱K软件,支持手机点歌

想唱就唱是一款实用性强的K歌软件&#xff0c;支持歌曲搜索、歌手搜索及排行榜。软件支持歌曲下载、点歌、插队&#xff0c;还支持手机扫码点歌&#xff0c;功能与KTV软件一致&#xff0c;让用户在家也能享受KTV体验。首次加载较慢&#xff0c;因采用先下载后播放方式。会员版已…

图文深入介绍Oracle DB link(一)

1. 引言&#xff1a; 本文图文深入介绍Oracle DB link&#xff0c;先介绍基本概念。 2.DB link的定义 数据库链接&#xff08;Database Link&#xff0c;简称 DB Link&#xff09;是 Oracle 数据库中的一个重要功能。它是一种在一个 Oracle 数据库实例中访问另一个 Oracle 数…

江协科技STM32学习- P34 I2C通信外设

&#x1f680;write in front&#x1f680; &#x1f50e;大家好&#xff0c;我是黄桃罐头&#xff0c;希望你看完之后&#xff0c;能对你有所帮助&#xff0c;不足请指正&#xff01;共同学习交流 &#x1f381;欢迎各位→点赞&#x1f44d; 收藏⭐️ 留言&#x1f4dd;​…

vxe-table 表格中实现多行文本的编辑

Vxe UI vue vxe-table 表格中实现多行文本的编辑 vxe-table v4.8 要在表格中使用多行文本编辑&#xff0c;可以通过设置行高方式&#xff0c;再设置 cell-config.verticalAlign: ‘top’ 单元格垂直对齐方式&#xff0c;实现顶部对齐&#xff0c;因为默认是居中对齐。 代码 …

Linux开发工具——make/Makefile

目录 一、什么是makefile&#xff1f; 二、为什么要有makefile&#xff1f; 三、makefile的使用 1.依赖关系与依赖方法 2.伪目标 3.定义变量 4.特殊符号 四、makefile的执行逻辑 一、什么是makefile&#xff1f; Makefile是一种自动化构建工具&#xff0c;make是一条指…

`掌握Python-PPTX,让PPt制作变得轻而易举!`

文章目录 掌握Python-PPTX&#xff0c;让PPT制作变得轻而易举&#xff01;背景介绍python-pptx 是什么&#xff1f;如何安装 python-pptx&#xff1f;简单库函数使用方法应用场景常见Bug及解决方案总结 掌握Python-PPTX&#xff0c;让PPT制作变得轻而易举&#xff01; 背景介绍…

uniapp vue3 使用echarts-gl 绘画3d图表

我自己翻遍了网上&#xff0c;以及插件市场&#xff0c;其实并没有uniapp 上使用echarts-gl的样例&#xff0c;大多数都是使用插件市场的echarts的插件 开始自己尝试直接用echartsgl 没有成功&#xff0c;后来尝试使用threejs 但是也遇到一些问题&#xff0c;最后我看官网的时…

windows运行ffmpeg的脚本报错:av_ts2str、av_ts2timestr、av_err2str => E0029 C4576

问题描述 我目前的环境是&#xff1a; 编辑器&#xff1a; Microsoft Visual Studio Community 2022 (64 位) 运行的脚本是ffmpeg自带的remux样例&#xff0c;只不过我想用c语言执行这个样例。在执行的过程中报错如下图&#xff1a; C4576 后跟初始值设定项列表的带圆括…

Moore Perf System 1.1版本

Moore Perf System&#xff08;一款性能分析工具&#xff09; 提供可视化界面&#xff0c;在时间轴上按时间顺序显示 CPU 和 GPU 的事件、吞吐和性能指标&#xff0c;帮助开发人员方便、快速、准确的定位到系统级别的性能瓶颈&#xff0c;进而进行针对性分析和优化&#xff0c;…

『VUE』19. scope避免组件之间样式互相覆盖(详细图文注释)

目录 使用多个组件带有样式分析如何避免css覆盖总结 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 欢迎关注 『VUE』 专栏&#xff0c;持续更新中 使用多个组件带有样式 ComPonent1.vue <template><h3>ComPonent1.vue</h3> </template><script&g…

数据结构 C/C++(实验二:栈)

&#xff08;大家好&#xff0c;今天分享的是数据结构的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; 目录 提要&#xff1a;实验题目 一、实验目的 二、实验内容及要求 三、算法思想 实验1 实验2 四、源程序及注释…

软考背诵笔记

计算机硬件组成 运算器&#xff0c;控制器&#xff0c;存储器&#xff0c;输入设备&#xff0c;输出设备 中央处理单元&#xff08;CPU&#xff09; 控制器组成 指令寄存器&#xff08;IR&#xff09;:暂存cpu执行指令 程序计数器&#xff08;PC&#xff09;:存放下一条执…

面试问答-1

目录 1、线程和进程的概念&#xff0c;区别、以及什么时候用线程什么时候用进程 1.1 概念 1.2 区别 1.3 选择 2、TCP/IP分几层&#xff0c;每层的核心任务是什么 1.tcp/ip模型 tcp&#xff1a; udp&#xff1a; tcp、udp的区别 tcp/udp的连接过程&#xff1a; 3、htt…

矩阵特殊打印方式

小伙伴们大家好&#xff0c;好几天没更新了&#xff0c;主要有个比赛。从今天起继续给大家更新&#xff0c;今天给大家带来一种新的题型&#xff1a;矩阵特殊打印方式。 螺旋打印矩阵 解题思路 首先给大家看一下什么是螺旋方式打印&#xff1a; 就像这样一直转圈圈。 我想大多…

Docker篇(Docker安装)

目录 一、Centos7.x 1. yum 包更新到最新 2. 安装需要的软件包 3. 设置 yum 源为阿里云 4. 安装docker 5. 安装后查看docker版本 6. 设置ustc镜像源 二、CentOS安装Docker 前言 1. 卸载&#xff08;可选&#xff09; 2. 安装docker 3. 启动docker 4. 配置镜像加速 …

计算机网络——路由器构成

算路由表是分布式去算——你算你的&#xff0c;我算我的 输出队列非先来先传 调度发生在哪里 缓存队列一般是应对——来数据方向的速度过快问题

C# 实现读取Excel文件并设置单元格计算公式再保存

背景&#xff1a;需求需要读取数据导出成Excel文件&#xff0c;并且其中有一列需要赋值为公式&#xff0c;用于用户自己修改数据自动计算 导出Excel&#xff0c;我用到开源包MiniExcel Gitee地址MiniExcel源码介绍&#xff0c;功能说明 Nuget安装 搜索MiniExcel 导出代码如下&a…

基于matlab的SVPWM逆变器死区补偿算法仿真研究

背景介绍&#xff1a; 三相脉宽调制(pulse width modulation&#xff0c;PWM)电压源逆变器(voltage source inverter&#xff0c;VSI)的死区效应可导致电机相电压和相电流畸变、零电流钳位效应以及转矩和转速脉动&#xff0c;系统性能降低。为提高系统运行性能&#xff0c;对V…

Spring Validation数据校检

文章目录 Spring Validation1 关于Spring Validation2 使用流程3 快速入门4 运行异常处理4.1 说明4.2 处理异常4.3 明确提示消息 5 常用注解5.1 NotNull注解5.2 NotEmpty 注解5.3 NotBlank 注解5.4 Size 注解5.5 Range 注解 6 非POJO参数校验6.1 使用流程6.2 使用示例 Spring V…