Spring IOC/DI、AOP介绍

1.Spring IOC

IOC(Inversion of Control):控制反转,IOC是一种面向对象的设计思想,可以减低代码间的耦合度,其中最常见的方式叫做依赖注入(DI)。IOC意味着将你设计好的对象交给容器控制,而不是传统的在你对象内部控制

控制反转三个问题: 1.谁控制谁

                                  2.控制了什么

                                  3.为什么反转了

谁控制谁,控制什么:在传统Java代码中,我们直接在对象内部通过new创建对象,是程序主动去创建对象。而IOC中专门有一个容器来创建这些对象,即由IOC容器来控制对象的创建,主要控制外部资源的获取(不只是对象还包括文件等)

为什么反转了:有反转就有正转,传统应用程序是由我们在对象中主动控制去直接获取依赖对象,这就是正转。反转是由容器来帮忙创建并注入依赖对象,因为容器帮我们创建并注入依赖对象,对象只是被动接受依赖对象,所以是反转,依赖对象的获取被反转了

2.Spring DI

DI(Dependency Injection):依赖注入,在容器运行的时候,扫描所有的依赖关系,并为之动态的注入对应的依赖关系。依赖注入的目的并不是为软件系统带来更多的功能,而是为了提高组件重用的频率

依赖注入三个问题:  1.谁依赖谁

                                   2.谁注入谁

                                   3.注入了什么

谁依赖谁,谁注入谁:应用程序依赖IOC容器。IOC容器注入应用程序依赖的对象

注入了什么:注入某个对象所需要的资源

总结:

依赖注入是控制反转的一种实现方式,还有一种方式是依赖查找,这两个概念就是一个同一个概念的不同角度描述

3.IOC的优缺点

优点:由IOC容器通过配置文件来管理对象的生命周期、依赖关系等,这样就不需要重新修改并编译具体的代码,从而实现组件之间的解耦,提高程序的灵活性和可维护性

缺点:创建对象的步骤变得复杂了,不直观

           使用反射来创建对象,在效率上会有损耗

           缺少IDE重构的支持,如果修改了类名,需要手动修改XML文件

4.什么是IOC容器?

IOC容器就是具有依赖注入功能的容器,IOC容器负责实例化、定位、配置应用程序中的对象及建立这些对象中的依赖

5.AOP的思想

AOP将应用系统分为两部分,一部分是核心业务逻辑,一部分是横向的通用逻辑,Spring通过反射机制调用目标类的代码,动态的将横切逻辑和业务逻辑交织在一起

6.Spring是如何管理事务的

1).Spring为事务管理提供了一致的编码模板,在高层次简历了统一的事务抽象,不管选择Spring JDBC、hibernate、JPA还是选择MyBatis,Spring都可以让用户用统一的编程模型进行事务管理,通过TransactionTemplate并配合使用事务回调TransactionCallback指定具体的持久化操作,就可以通过编程方式实现事务管理,而不需要关注资源的获取、复用、释放、事务同步和异常处理等操作

2).在Spring事务管理的抽象层主要包括3个接口:TransactionDefinition用于描述事务的隔离级别、超时时间、是否为只读事务和事务传播规则等控制事务具体行为的事务属性,TransactionStatus代表一个事务的具体运行状态,事务管理器可以通过该接口获取事务运行期的状态信息,PlatformTransactionManager事务管理器根据TransactionDefinition提供的事务属性配置信息创建事务,并用TransactionStatus描述这个激活事务的状态

3).Spring的声明式事务管理是通过Spring AOP实现的,通过事务的声明性信息,Spring负责将事务管理增强逻辑动态织入业务方法的相应连接点中,这些逻辑包括获取线程绑定资源、开始事务、提交/回滚事务、进行异常转换和处理等工作,Spring在基于Schema的配置中添加了一个tx命名空间,在配置文件中以明确结构化的方式定义事务属性,配合AOP命名空间所提供的切面定义,业务类方法事务配置得到了极大的简化

7.说一下Spring事务机制

Spring有两种事务处理机制,一种是声明式事务,一种是编程式事务

Spring的声明式事务管理在底层是建立在AOP的基础上的,其本质是对方法前后进行拦截,然后在目标方法开始之前创建或者加入一个事务,在执行完目标方法之后根据执行情况提交或者回滚事务,声明式事务最大的优点就是不需要通过编程的方式管理事务,这样就不需要在业务逻辑代码中掺杂事务管理的代码,只需要在配置文件中做相关的事务规则声明(或通过等价的基于标注的方式),便可以将事务规则应用到业务逻辑中,Spring强大的声明式事务管理功能,这主要得益于Spring依赖注入容器和Spring AOP的支持,依赖注入容器为声明式事务提供了基础设施,使得Bean对于Spring框架而言是可管理的,而Spring AOP则是声明式事务管理的直接实现者,和编程式事务相比,声明式事务唯一不足的地方是,后者的最细粒度只能作用到方法级别,无法做到编程式事务那样可以作用到代码块级别

8.Spring如何配置事务

1).使用XML配置声明式事务

2).使用注解配置声明式事务

9.Mybatis中#{ }和${ }的区别

#{}可以防止SQL注入,使用#{}的SQL语句会先经过预编译,经过与编译后,会=动态解析成一个参数标记符?,而${}在解析时,会直接传入值

简单来说就是#{}是先编译好SQL语句再取值,${}是先取值再编译SQL语句

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值