了解Spring:Java开发的利器

        Spring是一款开源的轻量级Java开发框架,旨在提高开发人员的效率和系统的可维护性。本文将介绍Spring的基本概念、使用优势、设计模式以及与Spring MVC和Spring Boot的关联。

什么是Spring?

        Spring是一款开源的轻量级Java开发框架,它由多个模块组成,旨在提高开发人员的效率和系统的可维护性。Spring支持控制反转(IoC)和面向切面编程(AOP),可以方便地访问数据库、集成第三方组件,支持单元测试和RESTful Java应用程序的开发。

使用Spring框架的好处

1. 轻量级:Spring框架的基本版本只有大约2MB,非常轻量。

2. 控制反转(IoC):Spring将对象的创建和管理交给了框架,开发人员只需关注业务逻辑。

3. 面向切面编程(AOP):Spring可以将应用的业务逻辑和系统服务分离,提高代码的可维护性。

4. 容器管理:Spring框架可以管理应用中对象的生命周期和配置,提供了便捷的依赖注入功能。

5. MVC框架:Spring MVC是Spring框架中的一个重要模块,用于快速构建MVC架构的Web程序。

6. 事务管理:Spring支持全局事务的控制,通过EJB CMT进行事务管理,确保操作的完整性。

7. 异常管理:Spring提供了方便的API来处理具体技术相关的异常,简化了异常处理的流程。

Spring IOC 如何理解?

        IOC的全称是inversion of control,也就是控制反转,它的核心思想是将对象的管理权限交给了容器。应用程序如果需要使用某个对象的实例,直接从IOC容器中获取即可。这种设计的好处在于降低了程序中对象与对象之间的耦合性,使整个程序体系结构变得更加灵活。

在Spring框架中,提供了多种方式来声明一个bean,比如在XML配置文件中通过bean标签,或者通过service注解,或者在configuration配置类中通过@Bean注解声明等。当Spring启动时,会解析这些bean定义,并将它们保存到IOC容器中。

                Spring IOC的工作流程大致可以分为两个阶段:第一个阶段是IOC容器的初始化阶段。这个阶段主要根据程序中定义的XML或注解等bean的生命方式,通过解析和加载后生成BeanDefinition,然后将BeanDefinition注册到IOC容器中。无论是通过注解还是XML声明的bean,都会解析得到一个BeanDefinition实体,这个实体包含了Bean的一些定义和基本属性,最后将这个BeanDefinition保存到一个Map集合中,从而完成IOC的一个初始化。IOC容器的作用就是对这些注册的bean的定义信息进行处理和维护,它是IOC容器控制复杂的核心。

第二个阶段是完成bean的初始化和依赖注入。进入第二个阶段后,会做两件事情:第一是通过反射针对没有设置类的私有属性的单例bean进行初始化;第二是完成bean的依赖注入。最后一个阶段就是bean的使用,通常我们会通过@Autowired这样的注解,或者通过@Inject注解从IOC容器中获取指定的bean实例。另外,针对设置了lazy属性以及非单例bean的实例化,是在每次获取bean对象的时候调用bean的初始化方法来完成实例化的,并且Spring IOC容器不会去管理这些bean。

IOC是Spring中提供的一种控制反转机制,目的是将项目中对象的依赖管理交给Spring实现,这样可以更好地实现对象关系的解耦,提高程序的可扩展性。

请解释Spring Bean的生命周期?

Spring Bean的生命周期大致可以分为五个阶段,分别是实例化、属性设置、初始化、销毁和容器关闭。

  1. 实例化:在这个阶段,Spring容器会通过反射创建Bean的实例对象。对于单例Bean,只会创建一个实例;对于原型Bean,每次请求都会创建一个新的实例。

  2. 属性设置:在实例化后,Spring会根据配置文件或注解,为Bean的属性进行赋值。这个过程称为依赖注入(Dependency Injection),可以通过setter方法、构造函数等方式来实现。

  3. 初始化:当Bean的所有属性都被设置好之后,Spring会调用Bean的初始化方法来完成初始化工作。这通常包括调用实现了InitializingBean接口的afterPropertiesSet()方法,或者配置了init-method属性的方法。

  4. 销毁:当Spring容器关闭时,会触发Bean的销毁过程。如果Bean实现了DisposableBean接口,那么它的destroy()方法会被调用;或者配置了destroy-method属性的方法也会被调用。

  5. 容器关闭:当所有的Bean都完成销毁过程后,Spring容器会关闭,从而释放资源。

Spring Bean的作用域之间有什么区别?

        Spring容器中的bean可以分为5个范围。所有范围的名称都是自说明的,但是为了避免混淆,还是让我们来解释一下:

1)singleton:这种bean范围是默认的,这种范围确保不管接受到多少个请求,每个容器中只有一个bean的实例,单例的模式由bean factory自身来维护。

2)prototype:原形范围与单例范围相反,为每一个bean请求提供一个实例。

3)request:在请求bean范围内会每一个来自客户端的网络请求创建一个实例,在请求完成以后,bean会失效并被垃圾回收器回收。

4)Session:与请求范围类似,确保每个session中有一个bean的实例,在session过期后,bean会随之失效。

5)global-session:global-session和Portlet应用相关。当你的应用部署在Portlet容器中工作时,它包含很多portlet。如果你想要声明让所有的portlet共用全局的存储变量的话,那么这全局变量需要存储在global-session中。

全局作用域与Servlet中的session作用域效果相同。

Spring中使用的设计模式

1. 代理模式:在AOP和远程调用中被广泛使用。

2. 单例模式:Spring配置文件中定义的Bean默认为单例模式。

3. 模板方法:用于解决重复代码的问题,例如RestTemplate、JmsTemplate、JpaTemplate等。

4. 工厂模式:BeanFactory用于创建对象的实例。

5. 适配器模式:Spring AOP中使用的一种模式。

6. 装饰器模式:Spring Data中的HashMapper使用了装饰器模式。

7. 观察者模式:Spring的事件驱动模型使用了观察者模式。

8. 回调模式:Spring的ResourceLoaderAware回调接口使用了回调模式。

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

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

相关文章

STM32之HAL开发——HAL库框架介绍

HAL库外设设计思想 HAL库借鉴面向对象的设计思想,将外设驱动封装为对象。 HAL库使用主线 HAL使用的主要用在俩个地方,无外乎外设初始化以及外设的使用。想用好这两个功能,我们首先得对外设的封装有一定的了解。 句柄结构体 xx_HandleTypeDef…

【吾爱破解】Android初级题(二)的解题思路 _

拿到apk,我们模拟器打开看一下 好好,抽卡模拟器是吧😀 jadx反编译看一下源码 找到生成flag的地方,大概逻辑就是 java signatureArr getPackageManager().getPackageInfo(getPackageName(), 64).signaturesfor (int i 0; i &l…

批量高效剪辑视频,轻松调整视频时长,轻松打造完美节奏

在数字化时代,视频内容已成为我们生活中不可或缺的一部分。无论是社交媒体上的短视频,还是专业影视制作中的长片,视频剪辑都扮演着至关重要的角色。然而,面对大量视频素材,如何高效地进行剪辑调整,让每一帧…

Express:快速搭建Node.js应用的基石

🤍 前端开发工程师、技术日更博主、已过CET6 🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 🍚 蓝桥云课签约作者、上架课程《Vue.js 和 E…

华为OD机试 - 打印任务排序 - 队列(Java 2024 C卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述1、输入2、输出3、说明 四、解题思路五、Java算法源码六、效果展示1、输入2、输出3、说明 华为OD机试 2024C卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题&a…

0基础 三个月掌握C语言(14)-上

自定义类型 其实C语言有内置类型 也有自定义的类型 内置类型(C语言本身支持的现成的类型) 如:char short int long float double.... 但仅仅有这些类型是不够的 比如说 我们想表示一个人(复杂对象) 对于人的描述那…

我们是如何测试人工智能的(八)包含大模型的企业级智能客服系统拆解与测试方法 -- 大模型 RAG

大模型的缺陷 -- 幻觉 接触过 GPT 这样的大模型产品的同学应该都知道大模型的强大之处, 很多人都应该调戏过 GPT,跟 GPT 聊很多的天。 作为一个面向大众的对话机器人,GPT 明显是鹤立鸡群,在世界范围内还没有看到有能跟 GPT 扳手腕…

开启Safari手势支持

在使用Safari 的时候,大家有没有觉得不支持手势使用起来不是很方便, 触摸板只支持少量简单的手势,如缩放,滚动等。如果使用鼠标的用户,则完全无法使用手势。经过折腾研究,使用CirMenu应用可以完美解决这个要…

C++第十一弹---类与对象(八)

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】 目录 1、友元 1.1、友元函数 1.2、友元类 2、内部类 3、匿名对象 4、拷贝对象时的一些编译器优化 总结 1、友元 友元提供了一种突破封装的方式&a…

深度解析:Elasticsearch写入请求处理流程

版本 Elasticsearch 8.x 原文链接:https://mp.weixin.qq.com/s/hZ_ZOLFUoRuWyqp47hqCgQ 今天来看下 Elasticsearch 中的写入流程。 不想看过程可以直接跳转文章末尾查看总结部分。最后附上个人理解的一个图。 从我们发出写入请求,到 Elasticsearch 接收请…

单目深度估计基础理论和论文学习总结

单目深度估计基础理论和论文学习总结 一、背景知识: 三维刚体运动的数学表示:旋转平移矩阵、旋转向量、欧拉角、四元数、轴角模型、齐次坐标、各种变换等 照相机模型:单目/双目模型,单目中的世界坐标系/相机坐标系/图像坐标系的…

从零开始的 dbt 入门教程 (dbt cloud 自动化篇)

一、引 在前面的几篇文章中,我们从 dbt core 聊到了 dbt 项目工程化,我相信前几篇文章足够各位数据开发师从零快速入门 dbt 开发,那么到现在我们更迫切需要解决的是如何让数据更新做到定时化,毕竟作为开发我们肯定没有经历每天定…

【项目管理后台】Vue3+Ts+Sass实战框架搭建二

Vue3TsSass搭建 git cz的配置mock 数据配置viteMockServe 建立mock/user.ts文件夹测试一下mock是否配置成功 axios二次封装解决env报错问题,ImportMeta”上不存在属性“env” 统一管理相关接口新建api/index.js 路由的配置建立router/index.ts将路由进行集中封装&am…

GA遗传算法和ALNS算法的区别(我的APS项目七)

博主用最简单的方式告诉你遗传算法是什么,估计这是网上最简单的遗传算法入门教程了。首先我们先带入一个问题,我们要去9大城市旅游,想知道每个城市走一遍,总路程最短的出行顺序是什么? OK,题目我们已经明确…

Chrome 插件打包发布

插件打包发布 一、打包成 zip 包 最简单方便的一种其实就是打包成 zip 包,通过下载链接进行下载,在包里面通过设置版本号和数据库的版本号对比来提醒用户进行新包的下载。 二、发布到 Chrome 应用商店 1. 注册成为开发者 在发布到 chrome 应用商店之…

第八节:深入讲解SMB中的Http组件

一、概述 Http组作是SMB中的核心组件之一,在第七节中讲解了如何简洁的进行web程序部署和运行,这只是它的功能之一。在本节中,我们将介绍Http组件的重要属性。 二、请求头Request 1、支持方法 支持POST、GET、PUT、DELETE、OPTIONS等方法&a…

吴恩达深度学习笔记:神经网络的编程基础2.15-2.17

目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第二周:神经网络的编程基础 (Basics of Neural Network programming)2.15 Python 中的广播(Broadcasting in Python)2.16 关于 python _ numpy 向量的说明&…

作为技术人员在日常工作中如何使用边界AICHAT工具

目录 1.1、解决日常问题1.2、编写日常程序1.3、优化日常工作中的代码1.4、边界AICHAT工具会员中心1.5、边界AICHAT工具普通用户的权益1.6、边界AICHAT工具超级永久会员的权益 有关边界AICHAT工具工具的介绍请参考之前的系列博文, 一款好用的AI工具——边界AICHAT&a…

【SpringSecurity】十六、OAuth2.0授权服务器、资源服务器的配置(理论部分)

文章目录 0、OAuth2服务端结构1、授权服务配置2、授权服务器 ⇒ 配置客户端详情3、授权服务器 ⇒ 管理令牌配置4、授权服务器:配置端点访问的安全约束5、资源服务器配置 相关📕: 【OAuth2授权服务器配置完整Demo】 0、OAuth2服务端结构 OAu…

微服务(基础篇-003-Nacos集群搭建)

目录 Nacos集群搭建 1.集群结构图 2.搭建集群 2.1.初始化数据库 2.2.下载nacos 2.3.配置Nacos 2.4.启动 2.5.nginx反向代理 2.6.优化 视频地址: 06-Nacos配置管理-nacos集群搭建_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1LQ4y127n4?p29&…