Spring框架——介绍与基本概念!

news2024/10/1 23:40:17

一、Spring框架概述

1.什么是Spring

Spring是一个轻量级的Java 开发开源框架,用于构建企业级应用程序。它提供了一组广泛使用的技术和API,包括依赖注入AOP数据访问事务管理Web开发集成测试等。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件。Spring框架的主要目标是帮助开发人员提高生产力和系统可维护性。Spring的核心是控制反转(IoC)和面向切面(AOP)

1.1、Spring框架高内聚低耦合

Spring框架是一个非常流行的Java开发框架,它的设计原则之一就是高内聚低耦合。

所谓高内聚,就是指一个模块或一个类只负责完成自己的任务,不涉及其他模块或类的业务逻辑。这样的设计能够保证模块或类的功能单一,易于维护和扩展。

而低耦合则指不同的模块或类之间的依赖关系尽量降低,相互之间的影响越小越好。这样的设计能够实现模块和类之间的独立性,模块或类的修改对其他模块或类的影响也会降到最低。

Spring框架在实现高内聚低耦合的原则方面做得非常好,它采用了依赖注入(DI)和面向切面编程(AOP)等技术,将模块或类之间的依赖关系降到最低,使得整个系统具有良好的可维护性和扩展性。

1.2、Spring的优点

  • 松耦合:Spring 采用松耦合的设计思路,使得应用程序更加灵活、可扩展和易于维护。

  • IOC 容器:Spring 框架提供了一个 IOC 容器,可以管理和组装对象之间的依赖关系,使得应用程序开发更加容易。

  • AOP 支持:Spring 框架支持面向切面编程(AOP),可以实现关注点分离,提高代码可复用性和可维护性。

  • 事务管理:Spring 框架提供了一个强大的事务管理框架,可以方便地管理事务,减少了开发人员的工作量。

  • 集成众多框架:Spring 框架可以与众多其他框架集成,例如 Struts、Hibernate、MyBatis、Quartz 等,使得应用程序开发更加便捷。

  • 简化开发:Spring 框架提供了一系列简化开发的工具和模板,例如 Spring MVC、Spring Boot 等,可以大大降低开发成本和时间。

  • 社区支持:Spring 框架是一个广泛使用的开源框架,拥有强大的社区支持和完善的文档,可以为开发人员提供良好的支持。

二、控制反转(IOC) 和依赖注入

(一)控制反转

IOC( Inversion of Control,中文释义:控制反转 ) 是Spring框架的核心思想之一,主要用于解耦。IOC是指将创建对象的控制权转移给Spring框架进行管理。由Spring框架根据配置文件或注解等方式,创建bean对象并管理各个bean对象之间的依赖关系。使对象之间形成松散耦合的关系,实现解耦;

○ 控制 :指的是对象创建(实例化、管理)的权力

○ 反转 :控制权交给外部环境(Spring框架、IoC容器)

(二)依赖注入

1.基本概念 

DI(Dependecy Inject,中文释义:依赖注入) 是对IOC概念的不同角度的描述,是指应用程序在运行时,每一个bean对象都依赖IOC容器注入当前bean对象所需要的另外一个bean对象。(例如在MyBatis整合Spring时,SqlSessionFactoryBean 依赖IOC容器注入一个 DataSource数据源bean)。

2.DI注入的数据类型:

  • 注入对象
  • 注入基本类型与String
  • 复杂类型list arry set map properties

3.DI实现方式:

  • set注入=通过set方法维护对象之间的依赖关系
  • 构造注入=通过构造方法维护对象之间的依赖关系
  • 属性注入(不推荐)

(1)set注入DI实现步骤:

1.给属性提供set方法
2.在bean标签内部开启配置
  • 配置位置:<bean>此位置</bean>
  • 配置语法:<property 属性名="属性值"></property>
  • 配置属性:
name属性名称
value属性值
ref属性值的引用构

(2)构造注入DI实现步骤:

1.给属性提供构造方法
2.在bean标签内部开启配置
  • 配置位置:<bean>此位置</bean>
  • 配置语法:<constructor-arg 属性名="属性值"></constructor-arg>
  • 配置属性:
name构造方法参数名称
index构造方法参数下标
type构造方法参数类型
value属性值
ref属性值的引用

三、SpringIOC容器对bean的管理 

(一)bean的自动装配

手动装配
<constructor-arg></constructor-arg>
<property></property>
语法

  • autowire="属性值"
  • default-autowire="属性值"

位置

  • bean标签---->局部设置
  • beans标签--->全部设置

属性

  • byName============>通过set方法按照名称自动装配,属性名称与bean的id
  • byType============>通过set方法按照类型自动装配,属性类型与bean的class
  • constructor=======>通过构造方法按照自动装类型配,属性类型与bean的class

注意:

  1. 全局,局部均设置,则就近原则
  2. 大型项目不建议使用,自动装配可读性低
  3. 自动装配一般只装配javaBean 

(二)bean的实例化 

通过类的无参构造方法实例化(默认)

通过指定工厂创建对象

通过指定静态工厂创建对象 

(三)bean的生命周期(单例)

四个阶段:实例化-->属性注入-->初始化-->销毁 

1.实例化
2.属性赋值
3.初始化

  • 接口初始化InitializingBean
  • 属性初始化init-method

4.操作使用
5.销毁

  • 接口销毁DisposableBean
  • 属性销毁destory-method

(四)bean的作用域

 语法:scope="属性"
属性:
singleton=====>单例,性能↑,安全性↓
prototype=====>多例,性能↓,安全性↑
web环境
request=======>一个请求创建javaBean
session=======>一个会话创建javaBean

四、面向切面(AOP)

AOP(Aspect-Oriented Programming: 面向切面编程)

将那些与业务无关,却为业务模块所共同调用的逻辑(例如事务处理、日志管理、权限控制等)封装抽取成一个可重用的模块,这个模块被命名为“切面”(Aspect),便于减少系统的重复代码,降低模块间的耦合度,并有利于未来的可拓展性和可维护性。

Spring AOP 基于动态代理实现:

  1. 如果被代理的对象,已经实现某个接口,则 Spring AOP 会使用 JDK Proxy(反射),基于接口的方式,创建代理对象(JDK动态代理的核心是InvocationHandler接口和Proxy类);
  2. 如果被代理的对象,没有实现某个接口,就无法使用 JDK Proxy 去进行代理了,这时候 Spring AOP 会使用 Cglib,基于继承的方式,生成一个被代理对象的子类来作为代理(Cglib动态代理的核心是MethodInterceptor接口和Enhancer类)。

AOP通知类型

AOP将抽取出来的共性功能称为通知;通知类型:以通知在上下文中的具体位置作为划分

  • 前置通知(Before)
  • 后置通知(After)
  • 返回通知(After-returning)
  • 异常通知(After-throwing)
  • 环绕通知(Around)

  • AOP连接点(Join point):AOP将所有的方法都视为连接点,不管是接口里面的抽象方法,还是实现类里面的重写方法,都是连接点
  • AOP切点(Pointcut):AOP将可能被抽取共性功能的方法称为切入点。切入点是连接点的子集
  • AOP目标对象(Target):就是挖掉功能的方法对应的类生的对象,这种对象是无法直接完成最终工作的
  • AOP织入(Weaving):就是将挖掉的功能回填的动态过程
  • AOP切面:切点+通知

 

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

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

相关文章

c盘中temp可以删除吗?appdata\local\temp可以删除吗?

http://www.win10d.com/jiaocheng/22594.html C盘AppData文件夹是一个系统文件夹&#xff0c;里面存储着临时文件&#xff0c;各种应用的自定义设置&#xff0c;快速启动文件等。近期有用户发现appdata\local\temp占用了大量的空间&#xff0c;那么该文件可以删除吗&#xff1f…

Java 21 发布,带来诸多新特性又一次创新的飞跃

一、引言 2023年9月19日&#xff0c;Oracle公司正式发布了JDK 21&#xff0c;这是按照六个月发布周期准时交付的第12个功能版本。 这种可预测性让开发者能够轻松地管理他们对创新的采用&#xff0c;感谢稳定的改进流。JDK 21不仅包含了数千个性能、稳定性和安全性更新&#xf…

比特币上的可验证延迟函数

可验证延迟函数 (VDF) 是一种需要大量 顺序计算 来评估但可以快速验证的函数。我们首次在比特币上实现了它。VDF 作为密码学技术可用于构建大量新应用程序&#xff0c;例如公共随机信标、计算时间戳和数据复制证明。 VDF 场景 链上随机信标 在区块链中很难实现随机性&#xf…

php生成二维码合成文字、背景图并保存本地图片

目录 1、实现效果&#xff0c;二维码二维码合成文字、背景图 2、下载并引入qrcode 3、创建static文件夹下载字体和背景图到这 4、创建test2.php&#xff0c;合成代码 1、实现效果&#xff0c;二维码二维码合成文字、背景图 2、下载并引入qrcode 1、到phpqrcpde官网下载类库…

UltraEdit 22 编辑器 for Mac

UltraEdit 是一款功能强大的文本编辑器和源代码编辑器。它具有多种功能&#xff0c;适用于程序员、网站开发人员和其他需要处理大量文本内容的用户。 UltraEdit 提供了正则表达式搜索和替换功能&#xff0c;可以快速查找和修改文本中的特定内容。它还支持多文件编辑和多窗口布局…

掌握文案新技能,拓世AI让你成为朋友圈文案达人

“人生如戏&#xff0c;戏如人生”&#xff0c;这是一句缥缈却真实的话&#xff0c;我们在生活中扮演着各种角色&#xff0c;经营自己的人生。如同美国社会学家戈夫曼提出的“拟剧论”&#xff1a;他将社会和人生比作一个大舞台&#xff0c;我们都在关心如何在众多观众面前打造…

Linux动态库

定义&#xff1a;动态函数库&#xff0c;是在程序执行时动态&#xff08;临时&#xff09;由目标程序去调用 优点&#xff1a; 调用时不复制&#xff0c;程序运行时动态加载到内存&#xff0c;供程序调用&#xff0c;系统只加载一次&#xff0c;多个程序可以共用&#xff0c;…

百亿、补贴这种低价怎么控

随着电商平台流量竞争的激烈演变&#xff0c;越来越多的促销形式进入人们的眼球&#xff0c;而店铺最简单的营销就是通过价格&#xff0c;所以低价销售成了各平台吸引消费者的方式&#xff0c;百亿补贴因为其独特的属性&#xff0c;与平台挂钩&#xff0c;通过“全网最低价”的…

VB在窗体中显示1000以内的完数

VB在窗体中显示1000以内的完数 在窗体中显示1000以内的完数&#xff08;如果一个整数的所有因子&#xff08;包括1&#xff0c;但不包括本身&#xff09;之和与该数相等&#xff0c;则称这个数字为完数。例如6123&#xff0c;所以6是一个完数&#xff09; Private Function Is…

【前端知识】Three 学习日志(五)—— 点光源辅助观察

Three 学习日志&#xff08;五&#xff09;—— 点光源辅助观察 一、引入点光源辅助观察 // 光源辅助观察 const pointLightHelper new THREE.PointLightHelper(pointLight, 10); scene.add(pointLightHelper);二、改变点光源位置 // 点光源位置 pointLight.position.set(2…

[补题记录] Atcoder Beginner Contest 308(C~E)

URL&#xff1a;https://atcoder.jp/contests/abc308 目录 C Problem/题意 Thought/思路 Code/代码 D Problem/题意 Thought/思路 Code/代码 E Problem/题意 Thought/思路 Code/代码 C Problem/题意 给出n个&#xff08;a&#xff0c;b&#xff09;数对&#xff…

短视频矩阵系统源代码开发搭建分享--代码开源SaaS

一、什么是短视频矩阵系统&#xff1f; 短视频矩阵系统是专门为企业号商家、普通号商家提供帐号运营从流量 到转化成交的一站式服务方案&#xff0c;具体包含&#xff1a;点赞关注评论主动私信 &#xff0c;评论区回复&#xff0c;自动潜客户挖掘&#xff0c;矩阵号营销&#x…

H3C ER G2系列路由器敏感信息泄露漏洞

声明 本文仅用于技术交流&#xff0c;请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、产品介绍 H3C ER2200G2是H3C推出的新一代高性能企业级路由器&#…

【Vue】模板语法,事件处理器及综合案例、自定义组件、组件通信

一、事件处理器 我们之前事件监听可以使用v-on 指令 1、事件修饰符 在Vue中我们通过由点(.)表示的指令后缀来调用修饰符&#xff0c;比如&#xff1a; .stop&#xff1a;阻止事件冒泡。当事件触发时&#xff0c;该修饰符将停止事件进一步冒泡到父元素。相当于调用了 event.stop…

CoreData 在新建或更新托管对象中途发生错误时如何恢复如初?

问题现象 在 CoreData 支持的 App 中,当我们新建或更新托管对象到一半突然出现错误时,应该禁止任何已发生的改变被写入内存或数据库中。不过,有时仍会出现始料未及的“意外”: 从上面的演示可以看到:即使在 Item 对象新建和更新途中出现错误后不执行后续的保存操作,但界…

决策树(中):数据挖掘十大算法之一

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ &#x1f434;作者&#xff1a;秋无之地 &#x1f434;简介&#xff1a;CSDN爬虫、后端、大数据领域创作者。目前从事python爬虫、后端和大数据等相关工作&#xff0c;主要擅长领域有&#xff1a;爬虫、后端、大数据…

多通道振弦数据记录仪隧道中安全监测应用方案

多通道振弦数据记录仪隧道中安全监测应用方案 近年来&#xff0c;随着城市化进程的加速推进&#xff0c;隧道建设越来越普遍。然而&#xff0c;隧道建设也带来了一系列安全问题&#xff0c;如地质灾害、水文灾害、交通事故、火灾等。因此&#xff0c;对隧道的安全监测非常重要…

20230920研发面经整理

1.cpp中的虚函数和虚函数表 C中的虚函数的作用主要是实现了多态的机制。关于多态&#xff0c;简而言之就是用父类型别的指针指向其子类的实例&#xff0c;然后通过父类的指针调用实际子类的成员函数 虚函数表是指在每个包含虚函数的类中都存在着一个函数地址的数组。当我们用…

免费好用bpm平台,实现生产管理系统

1.什么是生产管理系统 生产制造管理系统主要是以生产制造管理为核心&#xff0c;其管理功能包括产品结构设置&#xff08;BOM&#xff09;生产计划、加工、领料、质检、库存、成本核算等。通过信息化解决行业管理问题&#xff0c;满足各企业科学管理的需求&#xff0c;并为制造…

Ubuntu上线一个JAVA环境微服务架构的系统

项目背景: 项目目的: 项目架构: 配置环境: 流程: 1、系统安装 更改root密码 sudo passwd root 设置root密码123 切换用户 su root 输入root密码123 2、开启root远程ssh 编辑配置文件 vi /etc/ssh/sshd_config 更改以下行 #PermitRootLogin prohibit-passwor…