Spring系列2 -- Spring的创建和使用

news2024/11/26 3:27:23

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

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

 在Java中对象也叫做Bean,后续我们就把对象称之为Bean;

目录

1. 创建Spring项目(Maven创建)

1.1 创建一个Maven项目 

1.2 添加Spring 框架支持

1.3 添加启动类

2. 存储 Bean 对象

2.1 创建Bean 

2.2 将Bean注册到容器

3. 获取并使用Bean对象

3.1  创建 Spring 上下文

3.2  获取指定的 Bean 对象

3.3  使用Bean

4. 整体流程图


1. 创建Spring项目(Maven创建)

整体就分为以下三个步骤 

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

1.1 创建一个Maven项目 

点击下一步

 

1.2 添加Spring 框架支持

在项⽬的 pom.xml 中添加 Spring 框架的⽀持,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>

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

1.3 添加启动类

public class App {
    public static void main(String[] args) {
       // 实现代码
    }
}

 2. 存储 Bean 对象

存储 Bean 分为以下 2 步:

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

2.1 创建Bean 

所谓的 Bean 就是 Java 语⾔中的⼀个普通对象,实现代码如下:

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

2.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd">
</beans>

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

3. 获取并使用Bean对象

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

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

如果取多个 Bean 的话重复以上第 2、3 步骤。 

具体过程如下

3.1  创建 Spring 上下文

两种获取上下文的方式

1. 使用 ApplicationContext(主流)

2. 使用 BeanFactory 

1. 使用 ApplicationContext(主流) 

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

 2. 使用 BeanFactory 

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

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

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

3.2 获取指定的 Bean 对象

// 1.得到 Spring 上下⽂对象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
// 2.加载某个 bean
User user = (User) context.getBean("user");

 Bean的id要一一对应。

getBean ⽅法的更多⽤法

getBean() ⽅法有很多种重载⽅法,我们也可以使⽤其他⽅式来获取 Bean 对象,⽐如以下这两种:
1. 根据类型获取 Bean:

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

 2. 名称 + 类型获取 Bean(常用)

UserController user = context.getBean("user", UserController.class); 

⼆者的区别:当有⼀个类型被重复注册到 spring-config.xml 中时,只能使用根据名称获取了

3.3  使用Bean

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

4. 整体流程图

        上述是通过在Spring配置文件进行注入Bean对象,我们可以思考一个问题,如果我们在以后的项目中Bean对象特别多的时候,我们还要这样一个一个的添加吗?答案肯定不是,下一章节,我会总结一个更加有效率的注入Bean的方式,在配置文件中配置路径搜索的方法往容器中注入Bean对象,以及通过添加类注解的方式获取Bean对象。

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

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

相关文章

数据结构--二叉树的定义和基本术语

数据结构–二叉树的定义和基本术语 二叉树的基本概念 二叉树是 n ( n ≥ 0 &#xff09; n (n\ge0&#xff09; n(n≥0&#xff09;个结点的有限集合: ①或者为 空二叉树 \color{red}空二叉树 空二叉树&#xff0c;即n 0。 ②或者由一个 根结点 \color{red}根结点 根结点和两…

ModaHub魔搭社区:腾讯发布的向量数据库Tencent Cloud VectorDB有哪些核心能力?

腾讯发布的向量数据库有哪些核心能力&#xff1f; 腾讯云刚刚发布的向量数据库Tencent Cloud VectorDB主要具备以下能力&#xff1a; 高性能向量存储、检索&#xff1a;腾讯云向量数据库具备高性能的向量存储和检索能力&#xff0c;单索引能够轻松支持10亿级别的向量规模。在…

十二、flex练习

需求&#xff1a;做出下面的样式 代码实现&#xff1a; <body><ul class"nav"><li><a href"#">HTML/CSS</a></li><li><a href"#">Browser Side</a></li><li><a href&q…

【Hello mysql】 数据库库操作

Mysql专栏&#xff1a;Mysql 本篇博客简介&#xff1a;介绍数据库的库操作 库的操作 创建数据库创建数据库案例字符集和校验规则查看系统默认字符集和校验规则查看数据库支持的字符集和校验规则 校验规则对于数据库的影响操纵数据库查看数据库显示创建语句修改数据库数据库删除…

【7月新刊】避雷!这4本期刊竟无影响因子?!7月期刊目录已更新 (多本期刊影响因子上涨)~

6月28日&#xff0c;科睿唯安发布了最新JCR报告&#xff0c;一时间几家欢喜几家愁&#xff0c;但有的作者却发现&#xff0c;自己投稿的期刊虽然被核心库收录却没有影响因子&#xff0c;不免慌了神。 总的来说&#xff0c;被核心库收录的期刊没有公布影响因子&#xff0c;一般…

实战干货,自动化测试框架mark标记详细实战,进阶高级测试...

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

键盘输入一个字符 a’,串口工具显示“b 实现现象:键盘输入一个字符串,串口工具回显输入的字符串

1.键盘输入一个字符 a’,串口工具显示"b 2.实现现象:键盘输入一个字符串&#xff0c;串口工具回显输入的字符串 uart4.h #ifndef __UART4__H__ #define __UART4__H__ #include "stm32mp1xx_uart.h" #include "stm32mp1xx_gpio.h" #include "st…

SQLite Expert Professional将ACCESS数据库文件导入到SQLITE

一、下载与安装 下载对应的位数的SQLite Expert&#xff1a;http://www.sqliteexpert.com/download.html &#xff0c;建议下载professional版本的&#xff0c;功能更加强大。 如果官网进不去可以到百度云下载&#xff1a;https://pan.baidu.com/s/17igndAqQ7SQ57LcjwS4WIQ …

RK3588 PWM调试记录---linux pwm子系统驱动框架

一、RK3588 PWM简介 RK3588一共有4组PWM,每组有4个通道&#xff0c;共可以产生4*416路PWM波形&#xff1b; PWM0 开始地址&#xff1a;0xfd8b0000 PWM1 开始地址&#xff1a;0xfebd0000 PWM2 开始地址&#xff1a;0xfebe0000 PWM3 开始地址&#xff1a;0xfebf0000 即每组PWM的…

追着 chatGPT 打的 Claude 跑不动了?!

claude 据说是 openai 公司的副总裁因理念不合&#xff0c;出走创建的 anthropic 公司发明的聊天机器人&#xff0c;和 chatGPT一样&#xff0c;智能聊天功能都很不错。 大致水平在 强chatGPT3.5 左右。 前期因为免费试用&#xff0c;反应速度非常快&#xff0c;对国内也没有…

2. 日志模块(上)

日志需求分析 无论对于业务系统还是中间件来说&#xff0c;日志都是必不可少的基础功能。完善、清晰地日志可以帮助我们观测系统运行的状态&#xff0c;并且快速定位问题。现在让我们站在 MyBatis 框架开发者的角度&#xff0c;来简单做一下日志功能的需求分析&#xff1a; 作…

1760_C语言中选择排序的实现

全部学习汇总&#xff1a; GreyZhang/c_basic: little bits of c. (github.com) 选择排序的实现思想跟冒泡排序的思想非常相近&#xff0c;二者的差一点在于&#xff1a;冒泡排序在比较交换的过程中交换的是两个位置的数据&#xff0c;而选择排序则是在遍历比较的过程中寻找最小…

web安全php基础_echo,print,print_r,var_dump 的用处及区别

echo & print 在 PHP 中有两个基本的输出方式&#xff1a; echo 和 print。 PHP echo 语句 echo 是一个语言结构&#xff0c;使用的时候可以不用加括号&#xff0c;也可以加上括号&#xff1a; echo 或 echo()。 显示字符串 下面的实例演示了如何使用 echo 命令输出字…

QtWebApp介绍、下载和搭建http轻量级服务器Demo

一、QtWebApp介绍 QtWepApp是一个C中的HTTP服务器库&#xff0c;其灵感来自Java Servlet。适用于Linux、Windows、Mac OS和Qt Framework支持的许多其他操作系统。   QtWebApp包含以下组件&#xff1a; • HTTP(S)1.0和1.1服务器 • 模板引擎 • 缓冲记录器   这些组件可以…

暑假第二天打卡

离散&#xff1a; &#xff08;1&#xff09;联结词集及其优先级 &#xff08;2&#xff09;真值表 真值表&#xff0c;最让人迷糊的就是p的真值是0&#xff0c;q的真值是0,p→q的真值是1&#xff0c;理解话虚假的前提可以推出任意结论 构造真值表关键在于从00……0开始&…

【单例模式】—— 每天一点小知识

&#x1f4a7; 单例模式 \color{#FF1493}{单例模式} 单例模式&#x1f4a7; &#x1f337; 仰望天空&#xff0c;妳我亦是行人.✨ &#x1f984; 个人主页——微风撞见云的博客&#x1f390; &#x1f433; 《数据结构与算法》专栏的文章图文并茂&#x1f995;生动形…

点大商城V2_2.4.6 全开源版 百度+支付宝+QQ+头条+小程序端+unipp开源前端系统安装教程

播播资源了解到点大商城V2是一款采用全新界面设计支持多端覆盖的小程序应用&#xff0c;支持H5、微信公众号、微信小程序、头条小程序、支付宝小程序、百度小程序&#xff0c;本次测试全套安装的是序是点大商城V2独立版&#xff0c;包含全部插件&#xff0c;代码全开源&#xf…

java项目之高校二手交易平台(ssm+jsp+mysql)

风定落花生&#xff0c;歌声逐流水&#xff0c;大家好我是风歌&#xff0c;混迹在java圈的辛苦码农。今天要和大家聊的是一款基于ssm的高校二手交易平台。项目源码以及部署相关请联系风歌&#xff0c;文末附上联系信息 。 &#x1f495;&#x1f495;作者&#xff1a;风歌&…

Android中级——IPC

IPC IPC是什么&#xff1f;多进程带来的问题IPC前提SerializableParcelableBinder Android中的IPCBundle文件共享MessengerAIDLContentProviderSocket不同IPC优缺点 Binder连接池 IPC是什么&#xff1f; Inter-Process Communcation&#xff0c;含义为进程间通信或者跨进程通信…

NB-IoT学习笔记 —— NB-IoT介绍

一、简介 NB-IoT 是指窄带物联网&#xff08;Narrow Band Internet of Things&#xff09;技术&#xff0c;是一种低功耗广域&#xff08;LPWA&#xff09;网络技术标准&#xff0c;基于蜂窝技术&#xff0c;用于连接使用无线蜂窝网络的各种智能传感器和设备&#xff0c;聚焦于…