【Spring】Spring 创建和使用

news2024/11/23 11:12:26

Spring 创建和使用

  • 一. 创建 Spring 项目
    • 1. 创建⼀个 Maven 项目
    • 2. 添加 Spring 框架⽀持
    • 3. 添加启动类
  • 二. 存储 Bean 对象
    • 1. 创建 Bean
    • 2. 将 Bean 注册到容器
  • 三. 获取并使⽤ Bean 对象
    • 1. 创建 Spring 上下文
    • 2. 获取指定的 Bean 对象
    • 3. 使用 Bean

Spring 就是⼀个包含了众多⼯具⽅法的 IoC 容器。既然是容器那么它就具备两个最基本的功能:

  • 将对象存储到容器(Spring)中;
  • 从容器中将对象取出来。

在Java 语⾔中对象也叫做 Bean。

一. 创建 Spring 项目

使⽤ Maven ⽅式来创建⼀个 Spring 项⽬,创建 Spring 项⽬和 Servlet 类似,总共分为以下 3步:

  1. 创建⼀个普通 Maven 项⽬。
  2. 添加 Spring 框架⽀持(spring-context、spring-beans)。
  3. 添加启动类。

1. 创建⼀个 Maven 项目

在这里插入图片描述

2. 添加 Spring 框架⽀持

在项⽬的 pom.xml 中添加 Spring 框架的⽀持,配置如下:

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

从上述配置中可以看出,添加的框架有 spring-context:spring 上下⽂,还有 spring-beans:管理对象的模块。

3. 添加启动类

最后在创建好的项⽬ java ⽂件夹下创建⼀个启动类,包含 main ⽅法即可:

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

    }
}

二. 存储 Bean 对象

存储 Bean 分为以下 2 步:

  1. 存储 Bean 之前,先得有 Bean 才⾏,因此先要创建⼀个 Bean。
  2. 将创建的 Bean 注册到 Spring 容器中。
    具体实现如下。

1. 创建 Bean

Bean 就是 Java 语⾔中的⼀个普通对象

比如:

class User {
    public String sayHi(String name) {
        return name + " hello!";
    }
}

2. 将 Bean 注册到容器

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

在这里插入图片描述

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

接下来,再将 User 对象注册到 Spring 中就可以,具体操作是在 中添加如下配置:

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

这里面的 id 可以随便写,但是通常是将 类名的首字母的大写变为小写, 后面会根据这个 id 获取类,所以 id 不能重复, class 就是 类的位置。

三. 获取并使⽤ Bean 对象

获取并使⽤ Bean 对象,分为以下 3 步:

  1. 得到 Spring 上下⽂对象,因为对象都交给 Spring 管理了,所以获取对象要从 Spring 中获取,那么就得先得到 Spring 的上下⽂。
  2. 通过 Spring 上下⽂,获取某⼀个指定的 Bean 对象。
  3. 使⽤ Bean 对象。

1. 创建 Spring 上下文

Spring 上下⽂对象可使⽤ ApplicationContext,实现代码如下:

// 1.得到 Spring 的上下⽂对象,创建的时候需要配置 Spring 配置信息
ApplicationContext context = new ClassPathXmlApplicationContext("spring-con fig.xml"); // 配置文件的位置

除了 ApplicationContext 之外,我们还可以使⽤ BeanFactory 来作为 Spring 的上下⽂,如下代码所示:

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

ApplicationContext 和 BeanFactory 效果是⼀样的,ApplicationContext 属于 BeanFactory 的⼦类,它们的区别如下。

ApplicationContext VS BeanFactory(常⻅⾯试题):

  • 继承关系和功能⽅⾯来说:Spring 容器有两个顶级的接⼝:BeanFactory 和 ApplicationContext。其中 BeanFactory 提供了基础的访问容器的能⼒,⽽ ApplicationContext属于 BeanFactory 的⼦类,它除了继承了 BeanFactory 的所有功能之外,它还拥有独特的特性,还添加了对国际化⽀持、资源访问⽀持、以及事件传播等⽅⾯的⽀持。
  • 从性能⽅⾯来说:ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象,所以后面去访问 Bean 时会很快。⽽ BeanFactory 是需要那个才去加载那个,因此 BeanFactory 更加轻量。

2. 获取指定的 Bean 对象

        // 2.加载某个 bean
        User user1 = (User) context.getBean("user"); // 只根据 id 获取
        User user2 = context.getBean(User.class); // 只根据 类获取
        User user3 = context.getBean("user", User.class); // 同时根据 id 和 类获取,更推荐

注意事项: Bean 的 Id 要⼀⼀对应。
在这里插入图片描述

使用 类型获取和使用 id 获取 Bean 的区别:
当有⼀个类型被重复注册到 spring-config.xml 中时,只能使⽤根据名称获取了,⽐如以下程序:

在这里插入图片描述

在这里插入图片描述

而使用 类型获取就会报错:
在这里插入图片描述

3. 使用 Bean

public class App {
    public static void main(String[] args) {
        // 1.得到 Spring 上下⽂对象
        ApplicationContext context =
                new ClassPathXmlApplicationContext("spring-config.xml");
        // 2.加载某个 bean
        User user = (User) context.getBean("user1");
        // 3.调⽤相应的⽅法
        System.out.println(user.sayHi("Java"));
    }
}

总的流程:

在这里插入图片描述

好啦! 以上就是对 Spring 创建和使用的讲解,希望能帮到你 !
评论区欢迎指正 !

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

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

相关文章

HDF5文件数据读取

1、HDF5文件说明 HDF 是用于存储和分发科学数据的一种自我描述、多对象文件格式。HDF 是由美国国家超级计算应用中心(NCSA)创建的,以满足不同群体的科学家在不同工程项目领域之需要。HDF 可以表示出科学数据存储和分布的许多必要条件。HDF 被设计为: 自述性:对于一个HDF …

Koa学习4:密码加密、验证登录、颁发token、用户认证

请求体 这里遇到了个问题&#xff0c;ctx.request.body 的值是一个字符串。明明已经使用了koa-body中间件 查了一下原因是&#xff1a; ctx.request.body的值可能是一个对象或一个字符串&#xff0c;取决于请求的Content-Type和请求体的格式。 当使用koa-body中间件时&#x…

专业PDF编辑阅读工具PDF Expert mac中文特点介绍

PDF Expert mac是一款专业的PDF编辑和阅读工具。它可以帮助用户在Mac、iPad和iPhone等设备上查看、注释、编辑、填写和签署PDF文档。 PDF Expert mac软件特点 PDF编辑&#xff1a;PDF Expert提供了丰富的PDF编辑功能&#xff0c;包括添加、删除、移动、旋转、缩放、裁剪等操作…

基于Java的老年人体检管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

JDBC学习笔记(1)

连接数据库 下载mysql-connector-java&#xff0c;这里我是看的这个连接mysql-connector-java下载。 下载后并且导入了Idea中的lib文件下。 导入成功后&#xff0c;为了验证可以通过CTRLn来搜索Driver看看有没有添加进来。 随后在MySQL中创建一个数据库&#xff0c;我这里直…

小狐狸ChatGPT付费创作系统V2.0.4智能问答小程序,修复一个pc版的bug

狸GPT付费体验系统是一款基于ThinkPHP框架开发的AI问答小程序&#xff0c;是基于国外很火的ChatGPT进行开发的Ai智能问答小程序。 当前全民热议ChatGPT&#xff0c;流量超级大&#xff0c;引流不要太简单&#xff01;一键下单即可拥有自己的GPT&#xff01;无限多开、免费更新不…

Vue中如何进行多语言处理

Vue中的多语言处理 在开发多语言Web应用程序时&#xff0c;处理文本翻译和国际化是一个重要的任务。Vue.js提供了多种方法来实现多语言处理&#xff0c;以确保您的应用程序能够支持不同语言的用户。本文将深入探讨在Vue中进行多语言处理的方法&#xff0c;并提供示例代码来帮助…

基于SpringBoot的高校实习管理系统设计与实现(亮点:多角色、功能全、进可攻退可守)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

2023年中国家用智能投影市场发展趋势分析

2023年上半年&#xff0c;连续多年保持高速增长态势的家用智能投影行业&#xff0c;首次半年度出现同比负增长态势。2023年上半年&#xff0c;中国家用智能投影市场全渠道推总销量为323.0万台&#xff0c;同比下降2.6 %&#xff1b;销售额61.0亿元&#xff0c;同比下降2.9%&…

SLAM面试笔记(7) — Linux面试题

目录 问题1&#xff1a;Linux系统基本组件&#xff1f; 问题2&#xff1a;Linux和Unix有什么区别&#xff1f; 问题3&#xff1a;Linux下编译程序 问题4&#xff1a;gcc基本格式和常用指令 问题5&#xff1a;用什么命令查找内存和交换使用情况&#xff1f; 问题6&#xf…

基于SpringBoot的反诈宣传平台设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…

第四范式在港交所主板正式挂牌上市

9月28日上午9时30分&#xff0c;中国最大的以平台为中心的决策类人工智能公司第四范式&#xff0c;正式于香港联合交易所挂牌上市&#xff0c;股份代号为6682.HK。 作为一家长期专注于技术创新和企业端落地的人工智能软件公司&#xff0c;第四范式致力将AI应用到各行各业&#…

linux每处理器内存分配

一、每处理器 在多处理器系统中&#xff0c;每处理器变量为每个处理器生成一个变量副本&#xff0c;每个处理器访问自己的副本&#xff1b; 优点&#xff1a;避免处理器之间和处理器缓存之间的同步&#xff0c;提高程序的执行速度。 二、编程接口 1、静态 DEFINE_PER_CPU(ty…

Vue中如何进行数据请求拦截与错误处理

当你在Vue.js中开发应用程序时&#xff0c;数据请求拦截和错误处理是不可或缺的一部分。通过拦截请求&#xff0c;你可以在发送请求之前对其进行修改&#xff0c;而通过错误处理&#xff0c;你可以有效地处理来自服务器的错误响应。本文将介绍如何在Vue.js中进行数据请求拦截和…

马铃薯甲虫的成虫和幼虫数据集(YOLO检测)

数据集下载&#xff08;不要积分&#xff09;&#xff1a;https://download.csdn.net/download/qq_40840797/88389331 这是一个包含1810张图像的数据集&#xff0c;图像中展示了马铃薯甲虫的成虫和幼虫。这个数据集是专门为了用于农业机器人的点对点喷洒而设计的。这些图像是在…

云原生数据库TDSQL-C

数据库系统核心模块 云原生数据库要解决什么问题&#xff1f; HTAP 云数据库VS云原生数据库

Debezium日常分享系列之:使用数据库中的数据流进行在线机器学习

Debezium日常分享系列之&#xff1a;使用数据库中的数据流进行在线机器学习 一、背景介绍二、数据集准备三、使用 Apache Flink 进行分类四、使用 Debezium 和 Kafka 作为源数据流五、构建 Flink 流 k-means六、评估模型七、使用 Apache Spark 进行分类八、定义数据流九、定义和…

JAVA在线电子病历编辑器源码 B/S架构

电子病历在线制作、管理和使用的一体化电子病历解决方案&#xff0c;通过一体化的设计&#xff0c;提供对住院病人的电子病历书写、保存、修改、打印等功能。电子病历系统将临床医护需要的诊疗资料以符合临床思维的方法展示。建立以病人为中心&#xff0c;以临床诊疗信息为主线…

开源白板工具 Excalidraw 架构解读

本文讲解开源白板工具 Excalidraw 的架构设计。 版本 0.16.1 技术栈 Vite React TypeScript Yarn Husky。 脚手架原来是用的是 Create React App&#xff0c;但这个脚手架已经不维护了&#xff0c;一年多没发布新版本了。 目前市面上比较流行的 React 脚手架是 Vite&…

pycharm一直没显示运行步骤,只是出现waiting for process detach

pycharm一直没显示运行步骤&#xff0c;只是出现waiting for process detach&#xff1b;各类音乐免费软件&#xff1b;最棒的下载torch-geometric-CSDN博客&#xff08;不太推荐&#xff09;我强烈推荐这个&#xff1a;_waiting for process detachhttps://blog.csdn.net/weix…