基础框架SSM-----------spring篇

spring系统架构

46a5e3b66cc44ebdaf616c429203d8e8.png

 Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)!!!!!!!!

IOC(Inversion of Control)控制反转------解耦合


 如图使我们所熟悉的基本逻辑,在业务层中调用Dao层的对象,但是当我们Dao层进行修改的时候业务层也就需要改动,然后项目就得全部重新部署发布,导致代码的耦合度高,所以我们不在业务层创建对象,转换为外部提供01dfade4d6174577b84926f6ca6f016a.png

所以引入了IoC控制反转的思想并且Spring实现了该思想

9e7e93a51bdb401c95334ec220be413e.png


 ①IoC底层逻辑:把类的对象创建工作给IoC容器,然后只要获取IOC对象即可使用

第一步:导入Spring坐标

17a570484e624d3c9728ec3e997e201f.png

第二步:定义Spring管理的类

6e8b92ce34924f48843a51d95d7fab1b.png

第三步:配置对应的类使其交给IoC容器管理对象的创建

ecd991bedd5342059eee16058babcdf3.png

 第四步:获取容器对象,然后就可以使用getBean()方法注入bean对象并使用

d52c15221f5543e1bc44ab13732fdf23.png

②bean是如何创建出来的

第一种方法:调用无参的构造方法创建出来的

第二种方法:使用静态工厂实例化bean

第三种方法:使用实例工厂实例化bean

③bean的作用域

(1)singleton--单例模式,使用 singleton 定义的 Bean 在 Spring 容器中只有一个实例,这也是 Bean 默认的作用域。

(2)prototype--原型模式,每次通过 Spring 容器获取 prototype 定义的 Bean 时,容器都将创建一个新的 Bean 实例。

(3)request:在一次 HTTP 请求中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Request 内有效。

(4)session:在一次 HTTP Session 中,容器会返回该 Bean 的同一个实例。而对不同的 HTTP 请求,会返回不同的实例,该作用域仅在当前 HTTP Session 内有效。

(5)global Session:在一个全局的 HTTP Session 中,容器会返回该 Bean 的同一个实例。该作用域仅在使用 portlet context 时有效。

74f52b473d1b4e37916f294ef1980734.png

④bean的生命周期-------从创建到销毁

8685357677774ac3970ed0426ec3f6f6.png

⑤依赖注入

setter注入

setter注入引用类型

862d4b489bb8455aa72e1fcb62831990.jpg

 setter注入简单类型

a89ddf18806a4bbca3cee39d725efbcb.jpg

构造器注入

构造器注入引用类型

305fcdda30dc4138a42d49dbfa5b9c33.jpg

 构造器注入简单类型

24bc031ae9464fb2ae1929cd43978e30.jpg

 至于依赖的自动装配和集合(List,array,map...)的注入这里就不做讲解

⑥数据源对象管理-----Druid

df8df2ecfe034947816d47a2edb54c5e.jpg

⑦容器

创建容器:

b99cf42c39844df38c50fa4f0b07f02d.jpg

 获取bean:

bc1d921661a247e2967eeb4bd7dd8073.jpg

 接口结构:d72476de74544b82b6e8aa7af87f8ffd.jpg

至此以上都是对Spring配置的原理过程的学习,而在实际开发中都不是使用上面的开发模式,而是接下来的注解开发(很重要!!)

注解开发(要求熟练掌握)

①使用注解定义bean@component(也可以分为@Controller   @Service   @Repositary)

e517d080b8224a829ab799c08744d610.jpg

 ②配置文件用注解类替代@Configuration

5321dc89be984b428f722d68417c62ff.jpg

③使用注解依赖注入@Autowired

35aa04e101b64dfd9a6f0186313be9cc.jpg

④第三方的Bean

两种方式的对比 

AOP(Aspect Oriented Programming)面向切面编程------无侵入的功能增强

 核心概念:代理模式

 

 AOP的工作流程:

 

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

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

相关文章

springcloud基本使用二(远程调用)

创建两个springboot maven子项目 子项目名称分别为order-server和user-server 配置user-server子项目: 所需依赖: <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId> </dependenc…

【数据结构】AVL 树

文章目录 1. AVL 树的概念2. AVL 树节点的定义3. AVL 树的插入4. AVL 树的旋转5. AVL 树的验证6. AVL 树的删除7. AVL 树的性能 前面对 map / multimap / set / multiset 进行了简单的介绍【C】map & set&#xff0c;在其文档介绍中发现&#xff0c;这几个容器有个共同点是…

【前端面试3+1】05v-if和v-show的区别、v-if和v-for能同时使用吗、Vuex是什么?【合并两个有序链表】

一、v-if和v-show的区别 v-if 和 v-show 是 Vue.js 中用来控制元素显示与隐藏的指令。 1.v-if&#xff1a; v-if 是根据表达式的真假值来决定是否渲染元素。当表达式为真时&#xff0c;元素会被渲染到 DOM 中&#xff1b;当表达式为假时&#xff0c;元素不会被渲染到 DOM 中。每…

SWM341系列SDRAM应用

SWM341系列SDRAM应用 1、不同的时钟频率下&#xff0c;SDRAM的初始化参数设置 现象&#xff1a;驱屏应用&#xff0c;显示一段时间后出现卡住的现象 分析&#xff1a;SDRAM的初始 化参数优化 主频150Mhz,建议配置CASL 3&#xff0c;TRFC ≥8。 主频100Mhz,ClkDiv可配置为1…

【记录40】echarts离散图

EchartsEvent(val, data, Ymax) {var _that this;const timestampToTime function(timestamp) {var date new Date(timestamp * 1000);//时间戳为10位需*1000&#xff0c;时间戳为13位的话不需乘1000let Y date.getFullYear() -;let M (date.getMonth()1 < 10 ? 0(da…

3、jvm基础知识(三)

如何判断堆上的对象没有被引用&#xff1f; 常见的有两种判断方法&#xff1a;引用计数法和可达性分析法。 引用计数法会为每个对象维护一个引用计数器&#xff0c;当对象被引用时加1&#xff0c;取消引用时减1。 引用计数法的优点是实现简单&#xff0c;缺点有两点&#xff1…

Python | Leetcode Python题解之第3题无重复字符的最长子串

题目&#xff1a; 题解&#xff1a; class Solution:def lengthOfLongestSubstring(self, s: str) -> int:# 哈希集合&#xff0c;记录每个字符是否出现过occ set()n len(s)# 右指针&#xff0c;初始值为 -1&#xff0c;相当于我们在字符串的左边界的左侧&#xff0c;还没…

RWKV_Pytorch:支持多硬件适配的开源大语言模型推理框架

亲爱的技术探索者们&#xff0c;今天我要向大家隆重推荐一个在开源社区中崭露头角的项目——RWKV_Pytorch。这是一个基于Pytorch的RWKV大语言模型推理框架&#xff0c;它不仅具备高效的原生Pytorch实现&#xff0c;而且还扩展了对多种硬件的适配支持&#xff0c;让模型的部署和…

ios 之 netty版本swiftNio(socket创建)

SwiftNio 简介 用于高性能协议服务器和客户端的事件驱动、无阻塞的网络应用程序框架。 SwiftNIO是一个跨平台异步事件驱动的网络应用程序框架&#xff0c;用于快速开发可维护的高性能协议服务器和客户端。 这就像Netty&#xff0c;但是为Swift写的。 Xcode引入swiftNio 在实…

2013年认证杯SPSSPRO杯数学建模A题(第二阶段)护岸框架全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 A题 护岸框架 原题再现&#xff1a; 在江河中&#xff0c;堤岸、江心洲的迎水区域被水流长期冲刷侵蚀。在河道整治工程中&#xff0c;需要在受侵蚀严重的部位设置一些人工设施&#xff0c;以减弱水流的冲刷&#xff0c;促进该处泥沙的淤积&…

梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码

源码简介 最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载 梨花带雨播放器基于thinkphp6开发的XPlayerHTML5网页播放器前台控制面板,支持多音乐平台音乐解析。二开内容&#xff1a;修复播放器接口问题&#xff0c;把接口本地化&#xff0c;但是集成外链播放器…

微信公众号-图片裁剪并实现上传

一、背景 最近有个需求&#xff0c;需要用户按比例上传图片&#xff0c;即需要在上传前&#xff0c;让用户手动对图片进行裁剪。 看到这个诉求&#xff0c;我就去扒微信的api&#xff0c;发现有个属性叫wx.cropImage是做图片裁剪的&#xff0c;且可以传入对应的裁剪比例。在介…