当前位置: 首页 > news >正文

软件设计之SSM(1)

软件设计之SSM(1)

路线图推荐:
【Java学习路线-极速版】【Java架构师技术图谱】
尚硅谷新版SSM框架全套视频教程,Spring6+SpringBoot3最新SSM企业级开发
资料可以去尚硅谷官网免费领取

学习内容:

  1. Spring框架结构
  2. SpringIoC容器
  3. 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容器负责管理对象的创建和它们之间的依赖关系,这使得应用程序的各个部分之间的耦合度降低,从而提高了可维护性和可测试性。

组件一定是对象,对象不一定是组件

  1. 组件是对象

    • 在Spring框架中,组件(通常称为Bean)是通过Spring IoC容器管理的对象。它们的创建、配置和生命周期管理都是由Spring负责。
  2. 对象不一定是组件

    • 在Java中,任何通过new关键字创建的实例都是对象,但这些对象并不一定由Spring容器管理。如果一个对象没有被Spring管理,就不能享受Spring提供的特性,比如依赖注入、生命周期管理等。
  3. 可复用的Java对象

    • 组件通常被设计为可以在不同的上下文中重复使用。因为它们遵循了良好的设计原则,比如单一职责原则和依赖注入,它们的逻辑可以在不同的场景中使用,而不需要进行大量修改。

复杂容器概念引入

  1. 复杂容器指的是具有多个层次和功能的容器,能够管理和控制多个组件的生命周期、配置和交互。Tomcat不仅负责Servlet的执行,还处理了许多其他功能,如请求处理、线程管理、会话管理等。
  2. Spring IoC 容器,负责实例化、配置和组装 bean(组件)。容器通过读取配置元数据来获取有关要实例化、配置和组装组件的指令。配置元数据以 XML、Java 注解或 Java 代码形式表现。它允许表达组成应用程序的组件以及这些组件之间丰富的相互依赖关系。

IoC容器接口介绍

Spring IoC容器主要通过两个接口来实现:BeanFactoryApplicationContext。它们都负责管理Bean,但有一些关键的区别和扩展功能。

特性BeanFactoryApplicationContext
定义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应用中由ContextLoaderListenerDispatcherServlet加载,支持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实践与应用

实现步骤

  1. 配置元数据,此处以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>
  1. 实例化IoC容器
  • 提供给 ApplicationContext 构造函数的位置路径是资源字符串地址,允许容器从各种外部资源(如本地文件系统、Java CLASSPATH 等)加载配置元数据。
  • 选择一个合适的容器实现类,进行IoC容器的实例化工作:此处以ClassPathXmlApplicationContext为例
//实例化ioc容器,读取外部配置文件,最终会在容器内进行ioc和di动作
ApplicationContext context = new ClassPathXmlApplicationContext("services.xml", "daos.xml");
  1. 获取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) 路线图推荐&#xff1a; 【Java学习路线-极速版】【Java架构师技术图谱】 尚硅谷新版SSM框架全套视频教程&#xff0c;Spring6SpringBoot3最新SSM企业级开发 资料可以去尚硅谷官网免费领取 学习内容&#xff1a; Spring框架结构SpringIoC容器SpringIoC实践…...

STM32F745IE 能进定时器中断,无法进主循环

当你遇到STM32F745IE这类问题,即能够进入定时器中断但无法进入主循环(main() 函数中的循环),可能的原因和解决方法包括以下几个方面: 检查中断优先级和嵌套: 确保没有其他更高优先级的中断持续运行并阻止了主循环的执行。使用调试工具查看中断的进入和退出情况。检查中断…...

《凡人歌》中的IT职业启示录

《凡人歌》是由中央电视台、正午阳光、爱奇艺出品&#xff0c;简川訸执导&#xff0c;纪静蓉编剧&#xff0c;侯鸿亮任制片&#xff0c;殷桃、王骁领衔主演&#xff0c;章若楠、秦俊杰、张哲华、陈昊宇主演的都市话题剧 &#xff0c;改编自纪静蓉的小说《我不是废柴》。该剧于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&#xff0c;你需要确保你的包同时提供了CommonJS和ES6模块的入口点。这通常是通过在package.json文件中指定main和module字段来实现的&#xff0c;以及在构建过程中生成两种不同模块格式的文件。 以下是具体步骤&#xff1a; 设置pa…...

便捷将屏幕投射到安卓/iOS设备-屏幕投射到安卓/iOS设备,Windows/Mac电脑或智能电视上-供大家学习研究参考

1. 下载并安装软件(安卓苹果都需要) 确保 Android 设备和 Windows/Mac电脑都安装。启动应用程序并将 Android 设备和 Windows / Mac 了解到同一个wifi下面。 2、 发起投屏请求 在接收设备上:...

yolox训练自己的数据集

环境搭建 gpu按自己情况安装 nvidia-smi 查看自己的版本 CUDA和cudnn 按自己的安装&#xff0c;我的驱动551.76&#xff0c;注意不要用最新的&#xff0c;官网只要求驱动是大于等于&#xff0c;可以用低版本的cuda&#xff0c;我安装的是CUDA 11.1 cuda下载后&#xff0c…...

Centos8.5.2111(1)之本地yum源搭建和docker部署与网络配置

由于后边可能要启动多个服务&#xff0c;避免服务之间相互干扰&#xff0c;本课程建议每个服务独立部署到一台主机上&#xff0c;这样做会导致资源占用过多&#xff0c;可能会影响系统的运行。服务器部署一般不采用GUI图形界面部署&#xff0c;而是采用命令行方式部署&#xff…...

基于SSM+小程序的自习室选座与门禁管理系统(自习室1)(源码+sql脚本+视频导入教程+文档)

&#x1f449;文末查看项目功能视频演示获取源码sql脚本视频导入教程视频 1 、功能描述 1、管理员实现了首页、基础数据管理、论坛管理、公告信息管理、用户管理、座位管理等 2、用户实现了在论坛模块通过发帖与评论帖子的方式进行信息讨论&#xff0c;也能对账户进行在线充值…...

支付宝远程收款api之小荷包跳转码

想要生成小荷包跳转码的二维码&#xff0c;需要进行以下步骤&#xff1a; 1、开通支付宝小荷包的收款功能权限 2、获取支付宝的小荷包收款码和支付宝账户的UID已经手机号等相应信息&#xff08;可能会有变动&#xff09; 3、可能需要一定的代码基础&#xff0c;讲所需信息填…...

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 注意机制 + 添加小目标检测层改进后训练结果(极限涨点): 摘要 小目标检测难点众多,导致很多算法对小目标的检测效果远不如大中型目标。影响算法性能的主要原因如下:第一,小目…...

深入探索机器学习中的目标分类算法

在当今数据驱动的世界中&#xff0c;机器学习&#xff08;Machine Learning, ML&#xff09;正逐渐成为解决问题的重要工具。在众多机器学习任务中&#xff0c;目标分类&#xff08;Classification&#xff09;算法尤其受到关注。本文将深入探讨目标分类算法的基本概念、常见类…...

一文上手SpringSecurity【七】

之前我们在测试的时候,都是使用的字符串充当用户名称和密码,本篇将其换成MySQL数据库. 一、替换为真实的MySQL 1.1 引入依赖 <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.33</v…...

深圳龙链科技:全球区块链开发先锋,领航Web3生态未来

【深圳龙链科技】是全球领先的Web3区块链技术开发公司&#xff0c;专注于为全球客户提供创新高效的区块链解决方案。 深圳龙链科技由币安资深股东携手香港领先的Web3创新枢纽Cyberport联袂打造&#xff0c;立足于香港这一国际金融中心&#xff0c;放眼全球&#xff0c;汇聚了华…...

手写代码,利用 mnist 数据集测试对比 kan 和 cnn/mlp 的效果

你好呀&#xff0c;我是董董灿。 kan 模型火了一段时间&#xff0c;很多人从理论的角度给出了非常专业的解读&#xff0c;基本结论是&#xff1a;从目前来看&#xff0c;kan 很难替代 mlp 成为一个更加经典的模型结构。 我这里就不从理论方面进行回答了&#xff0c;直接给出一…...

基于Java+SQL Server2008开发的(CS界面)个人财物管理系统

一、需求分析 个人财务管理系统是智能化简单化个人管理的重要的组成部分。并且随着计算机技术的飞速发展&#xff0c;计算机在管理方面应用的旁及&#xff0c;利用计算机来实现个人财务管理势在必行。本文首先介绍了个人财务管理系统的开发目的&#xff0c;其次对个人财务管理…...

15年408计算机网络

第一题&#xff1a; 解析&#xff1a; 接收方使用POP3向邮件服务器读取邮件&#xff0c;使用的TCP连接&#xff0c;TCP向上层提供的是面向连接的&#xff0c;可靠的数据传输服务。 第二题&#xff1a; 解析&#xff1a;物理层-不归零编码和曼彻斯特编码 编码1&#xff1a;电平在…...

C++ const关键字

const 1. 修饰变量&#xff08;包括函数参数 函数返回值&#xff09; const int v0 10; v0 0; // error 不能修改const修饰的变量 2. 修饰指针 int v1 10; int v2 20; int v3 30; 2.1 常量指针 const 在指针左边&#xff0c;左定值&#xff0c;即不能通过指针修改该…...

python爬虫案例——腾讯网新闻标题(异步加载网站数据抓取,post请求)(6)

文章目录 前言1、任务目标2、抓取流程2.1 分析网页2.2 编写代码2.3 思路分析前言 本篇案例主要讲解异步加载网站如何分析网页接口,以及如何观察post请求URL的参数,网站数据并不难抓取,主要是将要抓取的数据接口分析清楚,才能根据需求编写想要的代码。 1、任务目标 目标网…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

国防科技大学计算机基础课程笔记02信息编码

1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制&#xff0c;因此这个了16进制的数据既可以翻译成为这个机器码&#xff0c;也可以翻译成为这个国标码&#xff0c;所以这个时候很容易会出现这个歧义的情况&#xff1b; 因此&#xff0c;我们的这个国…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

【单片机期末】单片机系统设计

主要内容&#xff1a;系统状态机&#xff0c;系统时基&#xff0c;系统需求分析&#xff0c;系统构建&#xff0c;系统状态流图 一、题目要求 二、绘制系统状态流图 题目&#xff1a;根据上述描述绘制系统状态流图&#xff0c;注明状态转移条件及方向。 三、利用定时器产生时…...

微信小程序云开发平台MySQL的连接方式

注&#xff1a;微信小程序云开发平台指的是腾讯云开发 先给结论&#xff1a;微信小程序云开发平台的MySQL&#xff0c;无法通过获取数据库连接信息的方式进行连接&#xff0c;连接只能通过云开发的SDK连接&#xff0c;具体要参考官方文档&#xff1a; 为什么&#xff1f; 因为…...

C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。

1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj&#xff0c;再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

GitFlow 工作模式(详解)

今天再学项目的过程中遇到使用gitflow模式管理代码&#xff0c;因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存&#xff0c;无论是github还是gittee&#xff0c;都是一种基于git去保存代码的形式&#xff0c;这样保存代码…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...