JavaEE进阶学习:Spring 的创建和使用

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

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

接下来使用 Maven 方式来创建一个 Spring 项目,创建 Spring 项目和 Servlet 类似,
在 Java 语言中对象也叫做 Bean,所以后面咱们再遇到对象就以 Bean 著称。

1.创建 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>
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>org.example</groupId><artifactId>test-2023-11-15</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><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></project>

3.创建启动类

在这里插入图片描述

2.将 Bean 对象存储到 Spring (IoC容器)

1.创建一个 Bean 对象

在这里插入图片描述

2.将 Bean 存储到 Spring 中

在创建好的项目中添加 Spring 配置文件 spring-config.xml,将此文件放到 resources 的根目录下

<?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 中就可以

<bean id="user" class="com.wjh.demo.UserService"></bean>

在这里插入图片描述

在这里插入图片描述

3.从容器中获取 Bean 对象

1.得到 Spring 上下文对象

在这里插入图片描述

public class App {public static void main(String[] args) {//1.先得到 Spring 上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");}
}

2.获取到 Bean 对象

在这里插入图片描述

public class App {public static void main(String[] args) {//1.先得到 Spring 上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");//2.得到 Beancontext.getBean("user");}
}

3.使用 Bean 对象

public class App {public static void main(String[] args) {//1.先得到 Spring 上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");//2.得到 Bean [依赖查找 -> IoC 的一种实现]UserService userService = (UserService) context.getBean("user");//3.使用 Bean 对象userService.sayHello();}
}

在这里插入图片描述

4.方法2

public class App2 {public static void main(String[] args) {//1.得到 Spring 上下文对象BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));//2.获取 BeanUserService userService = (UserService) context.getBean("user");//3.使用 BeanuserService.sayHello();}
}

在这里插入图片描述

5.ApplicationContext 和 BeanFactory 的区别

保证线程安全问题:
1.使用锁 ( synchronized 锁升级的流程)
2.使用线程安全的容器 (底层锁实现)
3.ThreadLocal (本地线程变量)

相同点 :

  1. 都是容器管理对象,都可以获取到 Bean 对象

不同点:

  1. ApplicationContext 属于 BeanFactory 的子类,ApplicationContext 拥有更多的功能(对国际化支持、资源访问支持、以及事件传播等方面的支持…)
  2. 加载 Bean 机制不同:
    BeanFactory 懒加载,按需加载(使用一个 Bean 加载一个 Bean)
    ApplicationContext 是⼀次性加载并初始化所有的 Bean 对象

我们加入一个 Student 类

public class App {public static void main(String[] args) {//1.先得到 Spring 上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");/* //2.得到 Bean [依赖查找 -> IoC 的一种实现]UserService userService = (UserService) context.getBean("user");//3.使用 Bean 对象userService.sayHello();*/}
}

在这里插入图片描述

public class App2 {public static void main(String[] args) {//1.得到 Spring 上下文对象BeanFactory context = new XmlBeanFactory(new ClassPathResource("spring-config.xml"));/*        //2.获取 BeanUserService userService = (UserService) context.getBean("user");//3.使用 BeanuserService.sayHello();*/}
}

在这里插入图片描述

在这里插入图片描述

6.getBean 方法的更多用法

  1. 根据名称获取 Bean

在这里插入图片描述

  1. 根据类型获取 Bean
public class GetBeanExample {public static void main(String[] args) {//1.得到上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");//2.获取 BeanUserService userService = context.getBean(UserService.class);//3.使用 BeanuserService.sayHello();}
}

在这里插入图片描述

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

  1. 根据 名称 + 类型 获取
public class GetBeanExample {public static void main(String[] args) {//1.得到上下文对象ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");//2.获取 BeanUserService userService = context.getBean("user", UserService.class);//3.使用 BeanuserService.sayHello();}
}

在这里插入图片描述

4.操作流程图

在这里插入图片描述

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

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

相关文章

二元关系及关系代数中的象集、除运算

二元关系及关系代数中的象集、除运算 数学上&#xff0c;二元关系用于讨论两个数学对象的联系。诸如算术中的「大于」及「等于」&#xff0c;几何学中的"相似"&#xff0c;或集合论中的"为...之元素"或"为...之子集"。二元关系有时会简称关系&a…

ERR_PNPM_INVALID_WORKSPACE_CONFIGURATION packages field missing or empty

vue执行 pnpm install命令时&#xff0c;报 ERR_PNPM_INVALID_WORKSPACE_CONFIGURATION  packages field missing or empty错&#xff0c;在网上查询了很久&#xff0c;也没有传出来结果&#xff0c;最后发现是pnpm的版本不对引起的。 我先执行的是npm install -g pnpm&…

卡尔曼滤波器在车流量检测中的应用

目录 1. 作者介绍2. 卡尔曼滤波器2.1 卡尔曼滤波概述2.2 标志性发展2.3 卡尔曼公式理解 3. 车流量检测3.1 背景介绍3.2 实现过程3.2.1 YOLOv3网络模型结构3.2.2 SORT算法3.2.3 基于虚拟线圈法的车辆统计 4. 算法实现4.1 Kalman.py4.2 完整代码4.3 结果展示 1. 作者介绍 吴思雨…

leetcode困难题

文章目录 找到矩阵中的好子集最长合法子字符串的长度情侣牵手三个无重叠子数组的最大和 找到矩阵中的好子集 解&#xff1a; 答案至多选取两行矩阵。 分析&#xff1a; 选取一行矩阵时&#xff0c;floor(c/2)0&#xff0c;那么必须全为0才能满足。 选取两行矩阵时&#xff0c;…

星火模型(Spark)的langchain 实现

星火模型的langchain实现 测试已通过&#xff0c;希望有所帮助。 使用前请先安装环境&#xff1a; pip install githttps://github.com/shell-nlp/spark-ai-python.git注意&#xff1a; 一定要使用上面方式安装spark库&#xff0c;因对官方的库做了改动。官方的库已经长时间不…

〖大前端 - 基础入门三大核心之JS篇㊳〗- DOM访问元素节点

说明&#xff1a;该文属于 大前端全栈架构白宝书专栏&#xff0c;目前阶段免费&#xff0c;如需要项目实战或者是体系化资源&#xff0c;文末名片加V&#xff01;作者&#xff1a;不渴望力量的哈士奇(哈哥)&#xff0c;十余年工作经验, 从事过全栈研发、产品经理等工作&#xf…

基于DOTween插件实现金币飞行到指定位置功能

文章目录 前言一、DOTween是什么&#xff1f;二、使用步骤1.导入DOTween插件在Unity官方插件商店找到DOTween插件导入DOTween插件启用DOTween插件 2.代码逻辑金币飞行代码控制飞行效果代码 3.物体配置1.物体上装配CoinEffect脚本2.在金币预制体上装配FlyControl脚本 三、效果展…

Web安全研究(五)

Automated WebAssembly Function Purpose Identification With Semantics-Aware Analysis WWW23 文章结构 introbackgroundsystem design abstraction genapplying abstractionsclassifier data collection and handling data acquisitionstatistics of collected datamodule-…

常见的SQLite语句

SQLite是一种嵌入式关系型数据库管理系统&#xff0c;它使用SQL&#xff08;Structured Query Language&#xff09;语言进行数据管理和操作。下面是一些常见的SQLite语句以及它们的详细介绍和示例说明。 1、CREATE TABLE&#xff1a;用于创建表格。它指定了表的名称和列的定义…

[管理与领导-125]:一个IT人的思考:职场中、人际交往中,不要为他人的不良行为和言语买单,不要让自己的情绪被外界影响或掌控。

目录 前言&#xff1a; 一、是什么What 二、为什么Why? 三、怎么办How? 前言&#xff1a; 无论是职场中&#xff0c;还是人际交往中&#xff0c;我们的难免受到他人的影响&#xff0c;有积极正面的情绪影响&#xff0c;有消极负面的情绪影响。为什么我们自身的情绪会受到…

回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测

回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测 目录 回归预测 | Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 Matlab实现HPO-ELM猎食者算法优化极限学习机的数据回归预测&#xff08;…

pytorch.nn.Conv1d详解

通读了从论文中找的代码&#xff0c;终于找到这个痛点了&#xff01; 以下详解nn.Conv1d方法 1 参数说明 in_channels(int) – 输入信号的通道。 out_channels(int) – 卷积产生的通道。 kernel_size(int or tuple) - 卷积核的尺寸&#xff0c;经测试后卷积核的大小应为in_cha…

Linux - 驱动开发 - RNG框架

说明 公司SOC上有一个新思的真随机数&#xff08;TRNG&#xff09;模块&#xff0c;Linux平台上需要提供接口给外部使用。早期方式是提供一个独立的TRNG驱动&#xff0c;实现比较简单的&#xff0c;但是使用方式不open&#xff0c;为了加入Linux生态环境&#xff0c;对接linux…

设计模式(一)-设计原则(1)

六大设计原则 1、单一职责原则 特点&#xff1a; 类和方法属性等&#xff0c;都应当遵守单一职责。尽可能保持统一性&#xff0c;单一性。 含义&#xff1a; &#xff08;1&#xff09;统一性&#xff0c;定义一个模块就必须要符合所有对象的行为特征。比如声明一个 Animal 类…

AR眼镜_单目光波导VS双目光波导方案

双目光波导AR眼镜方案是一种创新的智能设备&#xff0c;可以在现实场景中叠加虚拟信息&#xff0c;提供增强的视觉体验和交互体验。光学显示方案是AR眼镜的核心技术之一&#xff0c;它对眼镜的性能和使用体验起着决定性的作用。 相比于单目AR眼镜&#xff0c;双目AR眼镜具有更好…

【嵌入式 – GD32开发实战指南(ARM版本)】第2部分 外设篇 - 第3章 温度传感器DS18B20

1 理论分析 1.1 DS18B20概述 DS18B20 是 DALLAS 最新单线数字温度传感器,新的"一线器件"体积更小、适用电压更宽、更经济。Dallas 半导体公司的数字化温度传感器 DS1820 是世界上第一片支持 "一线总线"接口的温度传感器。 DS18B20采用的单总线协议,也…

【心得】Python基础梳理个人笔记

python 特点&#xff1a; 1 解释性语言 2 交互式语言 3 支持面向对象编程 4 初学者语言 基本语法 # -*- coding: utf-8 -*- #!/usr/bin/python3 #!/bin/sh python payload.py chmod x ./payload.py ./payload.py 直接python xxx.py 不需要声明#!/usr/bin/pytho…

Git详解及 github使用

1.1 关于版本控制 开始之前先看一个没有版本控制的例子 1.1.1 本地版本控制 本地版本控制系统 许多人习惯用复制整个项目目录的方式来保存不同的版本&#xff0c;或许还会改名加上备份时间以示区别。这么做唯一的 好处就是简单&#xff0c;但是特别容易犯错。有时候会混淆所在…

YOLOv5 学习记录

文章目录 整体概况数据增强与前处理自适应Anchor的计算Lettorbox 架构SiLU激活函数YOLOv5改进点SSPF 模块 正负样本匹配损失函数 整体概况 YOLOv5 是一个基于 Anchor 的单阶段目标检测&#xff0c;其主要分为以下 5 个阶段&#xff1a; 1、输入端&#xff1a;Mosaic 数据增强、…

C++学习 --vector

目录 1&#xff0c; 什么是vector 2&#xff0c; 创建vector 2-1&#xff0c; 标准数据类型 2-2&#xff0c; 自定义数据类型 2-3&#xff0c; 其他创建方式 3&#xff0c; 操作vector 3-1&#xff0c; 赋值 3-2&#xff0c; 添加元素 3-2-1&#xff0c; 添加元素(assi…