对Spring的IOC和AOP的理解,可做面试题用「建议收藏」

对Spring的IOC和AOP的理解,可做面试题用「建议收藏」IOC:控制反转,也叫DI依赖注入,它并不是一种技术实现,而是一种设计思想。在实际项目开发中,我们往往是通过类与类之间的相互协作来完成特定的业务逻辑,这个时候,每个类都要管理与自己有交互的类的引用和依赖,这就使得代码的维护异常困难并且耦合度过高,而IOC的出现正是为了解决这个问题,IOC将类与类的依赖关系写在配置文件中,程序在运行时根据配置文件动态加载依赖的类,降低的类与类之间的耦合度。它的原…

大家好,又见面了,我是你们的朋友全栈君。

一、IOC:控制反转,也叫DI依赖注入,它并不是一种技术实现,而是一种设计思想。

在实际项目开发中,我们往往是通过类与类之间的相互协作来完成特定的业务逻辑,这个时候,每个类都要管理与自己有交互的类的引用和依赖,这就使得代码的维护异常困难并且耦合度过高,而IOC的出现正是为了解决这个问题,IOC将类与类的依赖关系写在配置文件中,程序在运行时根据配置文件动态加载依赖的类,降低的类与类之间的耦合度。

它的原理是在applicationContext.xml加入bean标签,在bean标签中通过class属性说明具体类名、通过property标签说明该类的属性名、通过constructor-args说明构造子类参数。

其一切都是反射,当通过applicationContext.getBean(“id名称”)得到一个类实例时,就是以bean标签的类名、属性名、构造子类的参数为准,通过反射实例对象,唤起对象的set方法设置属性值、通过构造子类的newInstance实例化得到对象。

正因为spring一切都是反射,反射比直接调用的处理速度慢,所以这也是spring的一个问题。我们通过IOC将这些相互依赖的对象的创建、协调工作交给spring去处理,我们只需要关注其自身的业务逻辑就好,这样就由spring容器控制对象如何获取外部资源

二、spring第二大作用就是aop,其机理来自于代理模式,代理模式有三个角色分别是通用接口、代理、真实对象代理、真实对象实现的是同一接口。

我们以系统中常用到的事务管控举例子:在系统操作数据库的过程中,不可避免地要考虑到事务相关的内容。如果在每一个方法中都新建一个事务管理器,那么无疑是对代码严重的耦合和侵入。为了简化我们的开发过程(实际上spring所做的一切实现都是为了简化开发过程),需要把事务相关的代码抽成出来做为一个独立的模块。

通过AOP,确认每一个操作数据库方法为一个连接点,这些连接点组成了一个切面。当程序运行到其中某个一个切点时,我们将事务管理模块顺势织入对象中,通过通知功能,完成整个事务管控的实现。这样一来,所有的操作数据库的方法中不需要再单独关心事务管理的内容,只需要关注自身的业务代码的实现即可。所有的事务管控相关的内容都通过AOP的方式进行了实现。简化了代码的内容,将目标对象复杂的内容进行解耦,分离业务逻辑与横切关注点,aop实际上就是在不改变代码的前提下来实现对代码的增强。

 Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明 管理的(Spring根据这些配置 内部通过反射去动态的组装对象)

以上纯属自己个人学习的知识以及见解。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/150229.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • jar中没有主清单属性啥意思啊_eclipse 找不到或无法加载主类

    jar中没有主清单属性啥意思啊_eclipse 找不到或无法加载主类今天新写的SpringBoot项目打jar包部署的时候遇到一个问题,xxx.jar包中没有主清单属性。如下图所示:主清单属性是jar包中MANIFEST.MF文件中的一个属性,MANIFEST.MF文件位于jar包的META_INF路径下打开MANIFEST.MF文件,里面有如下属性:Manifest-Version:1.0Implementation-Title:com.imoocImple…

  • mysql 字符串转数字并排序

    mysql 字符串转数字并排序使用二级查询首先将字符串的列转成数字,然后排序select*from (selectCONVERT(k.key,SIGNED)askid,pathfromkpvk)tORDERBYt.kidasc;

  • Mac录屏转GIF「建议收藏」

    Mac录屏转GIF「建议收藏」首先使用QuickTimePlayer录屏,软件如下:使用方法:1.点击【新建屏幕录制】2.点击录制按钮,可以自行选定特定区域,也可以录制整个屏幕,自己设置3.完成之后,电脑顶部右边有结束按钮存储到需要的位置,下面开始转GIF所需工具:python和两个包:首先控制台检查版本,控制台先后输入:python3-Vpip3-V没有的先下载,有的话太低了自行升级安装需要的两个包:先安装:pip3installrequests-i再安装:pip3install

  • 什么样的黑客能用python盗QQ号[通俗易懂]

    什么样的黑客能用python盗QQ号[通俗易懂]目录一科普二、为何Python会被选用为黑客语言呢?三、Python对于黑客攻击的优点四、Python对于黑客攻击用途五、那么,Python难学么?六、精通Python需要多长时间?七、Python主要应用领域有哪些?一科普注:以下“爬虫”均指“垂直爬虫”1.非爬虫方向的技术转行做爬虫是否可行?可行,而且有一定的基础会很容易上手,至于深入的部分就看自己了。2.非技术转行做爬虫是否可行?可行,但我认为较难,因为爬虫做深了以后是需要你了解各种相关领

  • Vue3不支持Filters过滤器

    Vue3不支持Filters过滤器filters过滤器已从Vue3.0中删除,不再支持。2.x语法在2.x中,开发人员可以使用过滤器来处理常见的文本格式。<template><h1>BankAccountBalance</h1><p>{{accountBalance|currencyUSD}}</p></template><script>exportdefault{props:{a.

  • 变量定义规范_类型转换运算符

    变量定义规范_类型转换运算符变量定义规则定义方式驼峰体下划线你觉得哪种更清晰,哪种就是官方推荐的,我想你肯定会先第2种,第一种AgeOfOldboy咋一看以为是AngelaBaby定义变量不好的方式举例变量名为中文、

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号