AOP、IOC、Spring⾯试题(个⼈总结)
⼀、什么是IOC?
IOC就是⼀个Spring特有的,⽤来装类对象的,就是我们⽤Spring框架时,不需要new对象了,不过我们需要让我们的Spring知道我们写了哪些配置和需要⽤什么,所以这时我们就要引⽤Spring的注解或者在配置xml⽂件上配置我们的类配置,就是在我们⾃⼰写的类上加上@Component、@Controller、@Service、@Repository等等这些让我们的Spring知道我们等下要调⽤有哪些类,让它先准备准备,等下我们需要⽤了,就getBean或者通过@Autowrite、@Resource来取就⾏了,给个⽣活⽐喻吧,我们就是少爷,IOC 是⼀个管家,我们的类是我们努⼒的家产,但我的东西太多了,平时要⽤的时候还要⾃⼰⼀个⼀个的去拿,这时很容易把⾃⼰“累趴”,在Java中我们所说的就是效率太低,和耦合度太⾼了,这时我们有钱以后肯定想⽣活更加好,更加⽅便所以这时就去请⼈过家要就⾏了,来帮我们打理家常等这不,IOC管家就来了吗,从此我们在编程时需要什么就直接向管家要就⾏了,不过你要确定你⾃⼰的东西是存在的,⽽且管家已经知道了才⾏,不然你⼜要停下来慢慢的你的“异常”了。
⼆、 什么是AOP?
AOP就是⼀个⾯向切⾯的编程,它包含者⼏个步骤,切⾯(对应的切⾯类)、连接点(需要扫描的⽅法)、切点(符合条件的⽅法)、增强(加⼊事务,⾃⼰写的条件)、⽬标对象(⾃⼰写的代码对象)、织⼊(把事务或过滤的条件融合成⼀个代理对象)之所以需要AOP,是因为我们在写程序的时候由于⼤量的逻辑要做,往往很容易疏忽了我们的程序的安全,且我们在做完程序的编写之后⼜要去做⼤量的安全编写时是⾮常耗时间耗脑⼒的,
⼜或者我们想把以前做的不是很好的项⽬拿出来重新做时,⼜要改动原来的代码这过程是⾮常痛苦的,因此我们程序界⼤佬就做出了AOP这个伟⼤的程序,以前什么安全问题和插⼊新条件等从此就交由AOP来帮我们做了
三、 Spring是什么?
Spring是⼀个开源【容器】框架,可以接管web层,业务层,dao层,持久层的组件,并且可以配置各种bean,和维护bean与bean 之间的关系,其核⼼就是控制反转IOC,和⾯向切⾯AOP,简单的说就是⼀个分层的轻量级⽆侵⼊式开源框架
四、 事务是什么,作⽤?
事务是⽤来保障⼀件事要内部所有⼩节全部完成⽽不会出现卡壳的意外出现的,
就好像银⾏取钱,当个⼈把钱取出时,银⾏卡相对的⾦额就会出现变动,这⾥取钱,
就出现了两个步骤了,⼀扣⼀取,这两个步骤是需要⼀起完成⽽不可分开的,为了 防⽌他们分开,事务发挥了他的特性跟功能:
事务的四个特性:
1. 原⼦性: ⼀个事务要么全部提交成功,要么全部失败回滚,不能只执⾏其中的⼀部分操作,这就是事务的原⼦性
2. ⼀致性:事务的执⾏不能破坏数据库数据的完整性和⼀致性,⼀个事务在执⾏之前和执⾏之后,数据库都必须处于⼀致性状态。
3. 隔离性:
事务的隔离性是指在并发环境中,并发的事务时相互隔离的,⼀个事务的执⾏不能不被其他事务⼲扰。不同的事务并发操作相同的数据时,每个事务都有各⾃完成的数据空间,即⼀个事务内部的操作及使⽤的数据对其他并发事务时隔离的,并发执⾏的各个事务之间不能相互⼲扰。
4. 持久性:
⼀旦事务提交,那么它对数据库中的对应数据的状态的变更就会永久保存到数据库中。–即使发⽣系统崩溃或机器卡住障,只要数据库能够重新启动,那么⼀定能够将其恢复到事务成功结束的状态
⽽在其中事务的隔离性⼜有四个特性:
读未提交(Read Uncommited): 该隔离级别允许脏读取,其隔离级别最低;⽐如事务A和事务B同时进⾏,事务A在整个执⾏阶段,会将某数据的值从1开始⼀直加到10,然后进⾏事务提交,此时,事务B能够看到这个数据项在事务A操作过程中的所有中间值(如1变成2,2变成3等),⽽对这⼀系列的中间值的读取就是未授权读取
授权读取也称为已提交读(Read Commited): 授权读取只允许获取已经提交的数据。⽐如事务A和事务B同时进⾏,事务A进⾏+1操作,此时,事务B⽆法看到这个数据项在事务A操作过程中的所有中间值,只能看到最终的10。另外,如果说有⼀个事务C,和事务A进⾏⾮常类似的操作,只是事务C是将数据项从10加到20,此时事务B也同样可以读取到20,即授权读取允许不可重复读取。
可重复读(Repeatable Read): 是保证在事务处理过程中,多次读取同⼀个数据时,其值都和事务开始时刻是⼀致的,因此该事务级别禁⽌不可重复读取和脏读取,但是有可能出现幻影数据。所谓幻影
数据,就是指同样的事务操作,在前后两个时间段内执⾏对同⼀个数据项的读取,可能出现不⼀致的结果。在上⾯的例⼦中,可重复读取隔离级别能够保证事务B在第⼀次事务操作过程中,始终对数据项读取到1,但是在下⼀次事务操作中,即使事务B(注意,事务名字虽然相同,但是指的是另⼀个事务操作)采⽤同样的查询⽅式,就可能读取到10或20;
串⾏化: 是最严格的事务隔离级别,它要求所有事务被串⾏执⾏,即事务只能⼀个接⼀个的进⾏处理,不能并发执⾏
五、 IOC和AOP之间的关系?
IOC是通过Spring的容器帮我造对象跟零件的,⽽AOP是帮我把我写好的类通过容器帮我封装成代理对象来供外界访问和使⽤的,但AOP在帮我增强代码使⽤事务时,⼜要从我们的IOC中拿出对应的类来实现这个功能,总结AOP为我们增强程序的健康,⽽IOC为我们程序创造资源
六、 AOP和事务间的关系?spring ioc注解
AOP就是⼀个帮派的总称,事务就是其中的⼀名⼤佬,专门保护程序这⼀块的安全的,所以要交保护费的,保护费好像就是我们的(性能吧),就是我们平时写东西时总会出现安全的问题时,这时事务就会在我们AOP为我们程序⼯作时出现在我们的程序中保护我们程序的⾏动,但我们平时在⾃⼰调⽤时就是没有⽤到AOP的代理对象时
七、 Spring和SpringBoot是什么,区别
这⾥我就总结我在⽤他们时的感知吧,Spring是⽆侵⼊式轻量级的开发框架,他们归根到底都是要⽤到IOC和AOP这两位⼤哥
的,IOC呢就帮我们管理了平时我们要⽤的类对象和某些外部资源,不在需要我们在这些配置上绞尽脑汁了,⽽AOP呢就是帮我们管理程序的事务安全啊,还有⼀些旧的代码我们可以通过它做到⽆修改原版的基础上去加⼊我们想要增强的功能以及其他的⼀些新的操作。
他们的区别呢⼜在于,SpringBoot是Spring的⼦项⽬来的,SpringBoot2.4.4集成了Spring5.3.4,Spring早期刚刚开发出来⼈们发现它极⼤的满⾜和⽅便了⼈们的开发需求,所以就很多⼈⽤它,但⼈嘛,野⼼总是很⼤的,这不⽤久了,就感觉到Spring的⼿动配置环境太⿇烦了,就开始研究新的门路为了满⾜更⽅便的开发环境,这时Spring它的好⼤⼉SpringBoot就来到了我们⼈类⾯前,别说它还真的不错,这不零配置来帮助我们开发这是多么的⽜呀,可是万物都不是⼗全⼗美的,在没⽹的时候SpringBoot就成了你的开发最⼤的烦恼了。所以⽼的也有⽼的好,新的也有新的妙。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论