软件设计之SSM(1)
软件设计之SSM(1)
路线图推荐:
【Java学习路线-极速版】【Java架构师技术图谱】
尚硅谷新版SSM框架全套视频教程,Spring6+SpringBoot3最新SSM企业级开发
资料可以去尚硅谷官网免费领取
学习内容:
- Spring框架结构
- SpringIoC容器
- SpringIoC实践与应用
1、Spring框架结构
Spring是一个开源的Java框架,旨在简化Java企业级应用的开发。Spring Framework是其核心部分,提供了依赖注入、面向切面编程和事务管理等功能。所以一般Spring框架指的是Spring Framework,广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。
Spring Framework主要功能模块
| 模块 | 功能描述 |
|---|---|
| 核心容器 | 提供对象管理和依赖注入,支持Bean配置和生命周期管理。 |
| AOP | 支持面向切面编程,允许将横切关注点(如日志、事务)与业务逻辑分离。 |
| 数据访问/集成 | 简化JDBC操作,支持ORM框架(如Hibernate),提供数据访问的统一方式。 |
| Web模块 | 支持Spring MVC架构,创建Web应用程序,提供REST支持和文件上传功能。 |
| 安全模块 | 提供Spring Security,用于应用程序的身份验证和授权。 |
| 消息模块 | 提供对消息中间件(如JMS)的支持,支持异步处理。 |
| 声明式事务管理 | 通过注解或XML配置简化事务管理,允许在方法上声明事务属性,自动处理事务边界。 |
2、SpringIoC容器
-
在Spring框架中,组件是指由Spring容器管理的对象,通常被称为Bean。这些Bean可以是服务、控制器、数据访问对象等,Spring负责它们的创建、配置和生命周期管理。

-
组件管理是Spring的核心功能之一,主要通过IoC(控制反转) 实现。IoC容器负责管理对象的创建和它们之间的依赖关系,这使得应用程序的各个部分之间的耦合度降低,从而提高了可维护性和可测试性。
组件一定是对象,对象不一定是组件
-
组件是对象:
- 在Spring框架中,组件(通常称为Bean)是通过Spring IoC容器管理的对象。它们的创建、配置和生命周期管理都是由Spring负责。
-
对象不一定是组件:
- 在Java中,任何通过
new关键字创建的实例都是对象,但这些对象并不一定由Spring容器管理。如果一个对象没有被Spring管理,就不能享受Spring提供的特性,比如依赖注入、生命周期管理等。
- 在Java中,任何通过
-
可复用的Java对象:
- 组件通常被设计为可以在不同的上下文中
重复使用。因为它们遵循了良好的设计原则,比如单一职责原则和依赖注入,它们的逻辑可以在不同的场景中使用,而不需要进行大量修改。
- 组件通常被设计为可以在不同的上下文中
复杂容器概念引入
- 复杂容器指的是具有多个层次和功能的容器,能够管理和控制多个组件的生命周期、配置和交互。Tomcat不仅负责Servlet的执行,还处理了许多其他功能,如请求处理、线程管理、会话管理等。
- Spring IoC 容器,负责实例化、配置和组装 bean(组件)。容器通过读取配置元数据来获取有关要实例化、配置和组装组件的指令。配置元数据以 XML、Java 注解或 Java 代码形式表现。它允许表达组成应用程序的组件以及这些组件之间丰富的相互依赖关系。
IoC容器接口介绍
Spring IoC容器主要通过两个接口来实现:BeanFactory和ApplicationContext。它们都负责管理Bean,但有一些关键的区别和扩展功能。
| 特性 | BeanFactory | ApplicationContext |
|---|---|---|
| 定义 | Spring IoC容器的基本接口 | BeanFactory的子接口,提供更丰富的功能 |
| 实例化方式 | 延迟初始化,仅在需要时创建Bean | 预实例化,在启动时创建所有单例Bean |
| 国际化支持 | 无 | 支持多种语言和地区的国际化功能 |
| 事件传播 | 无 | 支持事件发布和监听机制,允许组件间的通信 |
| AOP支持 | 无 | 提供面向切面编程的支持 |
| 适用场景 | 轻量级应用,资源使用要求较高的场景 | 复杂应用,特别是需要更多功能的企业级应用 |
ApplicationContext容器实现类
| 上下文类型 | 功能描述 | 加载方式说明 |
|---|---|---|
| ClassPathXmlApplicationContext | 从类路径加载XML配置文件,适用于在类路径下有配置文件的应用,通常用于标准的Java SE应用。 | 从classpath根目录加载配置文件,通常是项目的类路径下的resources |
| FileSystemXmlApplicationContext | 从文件系统加载XML配置文件,适用于需要从任意路径加载配置文件的场景,能够处理绝对或相对路径。 | 直接从文件系统读取配置文件,可以使用绝对路径或相对路径。 |
| AnnotationConfigApplicationContext | 以Java注解方式加载配置,适合使用注解定义Bean和依赖关系的应用,支持使用@Configuration和@Component注解。 | 通过扫描指定包或类,解析注解以注册Bean。 |
| WebApplicationContext | 特殊类型的ApplicationContext,用于Web应用,提供额外的功能,如处理Web层的Bean、会话管理等,支持多种Web功能。 | 通常在Web应用中由ContextLoaderListener或DispatcherServlet加载,支持XML和注解配置。 |
配置方式
Spring框架提供了多种配置方式:XML配置方式、注解方式和Java配置类方式
| 特点 | XML配置 | Java配置 | 注解配置 |
|---|---|---|---|
| 配置形式 | 使用XML文件定义Bean | 使用带有@Configuration注解的类定义Bean | 使用类上的注解(如@Component等)自动扫描 |
| 类型安全 | 否 | 是 | 是 |
| 可读性 | 可读性一般,依赖于XML格式 | 可读性好,遵循Java语法 | 可读性好,直接在类上定义 |
| 灵活性 | 灵活,但修改后需重启应用 | 灵活,支持Java编程中的逻辑 | 灵活,支持灵活的包扫描 |
| 示例 | <bean id="myBean" class="com.example.MyClass"/> | @Bean public MyClass myBean() {...} | @Component public class MyClass {...} |
| 依赖注入方式 | 通过<property>或<constructor-arg>标签 | 通过方法参数和返回值 | 通过构造函数、字段或方法 |
| 启动方式 | 需要手动指定XML文件 | 通过Java类自动加载配置 | 通过@ComponentScan自动扫描 |
容器、IoC、DI

3、SpringIoC实践与应用
实现步骤
- 配置元数据,此处以XML为例
-
Spring IoC 容器管理一个或多个组件。这些组件是使用你提供给容器的配置元数据(例如,以 XML
<bean/>定义的形式)创建的。 -
<bean /> 标签 == 组件信息声明
-
id属性是标识单个 Bean 定义的字符串。
-
class属性定义 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/beanshttps://www.springframework.org/schema/beans/spring-beans.xsd"><bean id="..." [1] class="..." [2]> <!-- collaborators and configuration for this bean go here --></bean><bean id="..." class="..."><!-- collaborators and configuration for this bean go here --></bean><!-- more bean definitions go here -->
</beans>
- 实例化IoC容器
- 提供给
ApplicationContext构造函数的位置路径是资源字符串地址,允许容器从各种外部资源(如本地文件系统、JavaCLASSPATH等)加载配置元数据。 - 选择一个合适的容器实现类,进行IoC容器的实例化工作:此处以ClassPathXmlApplicationContext为例
//实例化ioc容器,读取外部配置文件,最终会在容器内进行ioc和di动作
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
- 获取Bean(组件)
ApplicationContext是一个高级工厂的接口,能够维护不同 bean 及其依赖项的注册表。通过使用方法T getBean(String name, Class<T> requiredType),可以检索 bean 的实例。允许读取 Bean 定义并访问它们,如以下示例所示:
//创建ioc容器对象,指定配置文件,ioc也开始实例组件对象
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
//获取ioc容器的组件对象
PetStoreService service = context.getBean("petStore", PetStoreService.class);
//使用组件对象
List<String> userList = service.getUsernameList();
相关文章:
软件设计之SSM(1)
软件设计之SSM(1) 路线图推荐: 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版SSM框架全套视频教程,Spring6SpringBoot3最新SSM企业级开发 资料可以去尚硅谷官网免费领取 学习内容: Spring框架结构SpringIoC容器SpringIoC实践…...
STM32F745IE 能进定时器中断,无法进主循环
当你遇到STM32F745IE这类问题,即能够进入定时器中断但无法进入主循环(main() 函数中的循环),可能的原因和解决方法包括以下几个方面: 检查中断优先级和嵌套: 确保没有其他更高优先级的中断持续运行并阻止了主循环的执行。使用调试工具查看中断的进入和退出情况。检查中断…...
《凡人歌》中的IT职业启示录
《凡人歌》是由中央电视台、正午阳光、爱奇艺出品,简川訸执导,纪静蓉编剧,侯鸿亮任制片,殷桃、王骁领衔主演,章若楠、秦俊杰、张哲华、陈昊宇主演的都市话题剧 ,改编自纪静蓉的小说《我不是废柴》。该剧于2…...
go libreoffice word 转pdf
一、main.go 关键代码 完整代码 package mainimport ("fmt""github.com/jmoiron/sqlx""github.com/tealeg/xlsx""log""os/exec""path/filepath" ) import _ "github.com/go-sql-driver/mysql"import &q…...
打造双模兼容npm包:无缝支持require与import
为了实现一个npm包同时支持require和import,你需要确保你的包同时提供了CommonJS和ES6模块的入口点。这通常是通过在package.json文件中指定main和module字段来实现的,以及在构建过程中生成两种不同模块格式的文件。 以下是具体步骤: 设置pa…...
便捷将屏幕投射到安卓/iOS设备-屏幕投射到安卓/iOS设备,Windows/Mac电脑或智能电视上-供大家学习研究参考
1. 下载并安装软件(安卓苹果都需要) 确保 Android 设备和 Windows/Mac电脑都安装。启动应用程序并将 Android 设备和 Windows / Mac 了解到同一个wifi下面。 2、 发起投屏请求 在接收设备上:...
yolox训练自己的数据集
环境搭建 gpu按自己情况安装 nvidia-smi 查看自己的版本 CUDA和cudnn 按自己的安装,我的驱动551.76,注意不要用最新的,官网只要求驱动是大于等于,可以用低版本的cuda,我安装的是CUDA 11.1 cuda下载后,…...
Centos8.5.2111(1)之本地yum源搭建和docker部署与网络配置
由于后边可能要启动多个服务,避免服务之间相互干扰,本课程建议每个服务独立部署到一台主机上,这样做会导致资源占用过多,可能会影响系统的运行。服务器部署一般不采用GUI图形界面部署,而是采用命令行方式部署ÿ…...
基于SSM+小程序的自习室选座与门禁管理系统(自习室1)(源码+sql脚本+视频导入教程+文档)
👉文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 1、管理员实现了首页、基础数据管理、论坛管理、公告信息管理、用户管理、座位管理等 2、用户实现了在论坛模块通过发帖与评论帖子的方式进行信息讨论,也能对账户进行在线充值…...
支付宝远程收款api之小荷包跳转码
想要生成小荷包跳转码的二维码,需要进行以下步骤: 1、开通支付宝小荷包的收款功能权限 2、获取支付宝的小荷包收款码和支付宝账户的UID已经手机号等相应信息(可能会有变动) 3、可能需要一定的代码基础,讲所需信息填…...
STM32 F1移植FATFS文件系统 USMART组件测试相关函数功能
STM32 F1移植FATFS文件系统 使用USMART调试组件测试相关函数功能 文章目录 STM32 F1移植FATFS文件系统 使用USMART调试组件测试相关函数功能前言部分主要相关代码# USMART介绍1. mf_scan_files 扫描磁盘文件2. mf_mount 挂载磁盘3. mf_open 打开文件4. mf_read 读数据内容5. mf…...
YOLOv8改进 | 融合篇,YOLOv8主干网络替换为MobileNetV3+CA注意机制+添加小目标检测层(全网独家首发,实现极限涨点)
原始 YOLOv8 训练结果: YOLOv8 + MobileNetV3改进后训练结果: YOLOv8 + MobileNetV3 + CA 注意机制 + 添加小目标检测层改进后训练结果(极限涨点): 摘要 小目标检测难点众多,导致很多算法对小目标的检测效果远不如大中型目标。影响算法性能的主要原因如下:第一,小目…...
深入探索机器学习中的目标分类算法
在当今数据驱动的世界中,机器学习(Machine Learning, ML)正逐渐成为解决问题的重要工具。在众多机器学习任务中,目标分类(Classification)算法尤其受到关注。本文将深入探讨目标分类算法的基本概念、常见类…...
一文上手SpringSecurity【七】
之前我们在测试的时候,都是使用的字符串充当用户名称和密码,本篇将其换成MySQL数据库. 一、替换为真实的MySQL 1.1 引入依赖 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</v…...
深圳龙链科技:全球区块链开发先锋,领航Web3生态未来
【深圳龙链科技】是全球领先的Web3区块链技术开发公司,专注于为全球客户提供创新高效的区块链解决方案。 深圳龙链科技由币安资深股东携手香港领先的Web3创新枢纽Cyberport联袂打造,立足于香港这一国际金融中心,放眼全球,汇聚了华…...
手写代码,利用 mnist 数据集测试对比 kan 和 cnn/mlp 的效果
你好呀,我是董董灿。 kan 模型火了一段时间,很多人从理论的角度给出了非常专业的解读,基本结论是:从目前来看,kan 很难替代 mlp 成为一个更加经典的模型结构。 我这里就不从理论方面进行回答了,直接给出一…...
基于Java+SQL Server2008开发的(CS界面)个人财物管理系统
一、需求分析 个人财务管理系统是智能化简单化个人管理的重要的组成部分。并且随着计算机技术的飞速发展,计算机在管理方面应用的旁及,利用计算机来实现个人财务管理势在必行。本文首先介绍了个人财务管理系统的开发目的,其次对个人财务管理…...
15年408计算机网络
第一题: 解析: 接收方使用POP3向邮件服务器读取邮件,使用的TCP连接,TCP向上层提供的是面向连接的,可靠的数据传输服务。 第二题: 解析:物理层-不归零编码和曼彻斯特编码 编码1:电平在…...
C++ const关键字
const 1. 修饰变量(包括函数参数 函数返回值) const int v0 10; v0 0; // error 不能修改const修饰的变量 2. 修饰指针 int v1 10; int v2 20; int v3 30; 2.1 常量指针 const 在指针左边,左定值,即不能通过指针修改该…...
python爬虫案例——腾讯网新闻标题(异步加载网站数据抓取,post请求)(6)
文章目录 前言1、任务目标2、抓取流程2.1 分析网页2.2 编写代码2.3 思路分析前言 本篇案例主要讲解异步加载网站如何分析网页接口,以及如何观察post请求URL的参数,网站数据并不难抓取,主要是将要抓取的数据接口分析清楚,才能根据需求编写想要的代码。 1、任务目标 目标网…...
《用户共鸣指数(E)驱动品牌大模型种草:如何抢占大模型搜索结果情感高地》
在注意力分散、内容高度同质化的时代,情感连接已成为品牌破圈的关键通道。我们在服务大量品牌客户的过程中发现,消费者对内容的“有感”程度,正日益成为影响品牌传播效率与转化率的核心变量。在生成式AI驱动的内容生成与推荐环境中࿰…...
苍穹外卖--缓存菜品
1.问题说明 用户端小程序展示的菜品数据都是通过查询数据库获得,如果用户端访问量比较大,数据库访问压力随之增大 2.实现思路 通过Redis来缓存菜品数据,减少数据库查询操作。 缓存逻辑分析: ①每个分类下的菜品保持一份缓存数据…...
QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
css3笔记 (1) 自用
outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size:0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格ÿ…...
html-<abbr> 缩写或首字母缩略词
定义与作用 <abbr> 标签用于表示缩写或首字母缩略词,它可以帮助用户更好地理解缩写的含义,尤其是对于那些不熟悉该缩写的用户。 title 属性的内容提供了缩写的详细说明。当用户将鼠标悬停在缩写上时,会显示一个提示框。 示例&#x…...
USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...
安全突围:重塑内生安全体系:齐向东在2025年BCS大会的演讲
文章目录 前言第一部分:体系力量是突围之钥第一重困境是体系思想落地不畅。第二重困境是大小体系融合瓶颈。第三重困境是“小体系”运营梗阻。 第二部分:体系矛盾是突围之障一是数据孤岛的障碍。二是投入不足的障碍。三是新旧兼容难的障碍。 第三部分&am…...
Git常用命令完全指南:从入门到精通
Git常用命令完全指南:从入门到精通 一、基础配置命令 1. 用户信息配置 # 设置全局用户名 git config --global user.name "你的名字"# 设置全局邮箱 git config --global user.email "你的邮箱example.com"# 查看所有配置 git config --list…...
LabVIEW双光子成像系统技术
双光子成像技术的核心特性 双光子成像通过双低能量光子协同激发机制,展现出显著的技术优势: 深层组织穿透能力:适用于活体组织深度成像 高分辨率观测性能:满足微观结构的精细研究需求 低光毒性特点:减少对样本的损伤…...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
