几句话说清楚:Spring IOC和AOP

IOC
能看得懂的定义

IOC控制反转,是一种设计思想,一般情况在程序中我们主动创建依赖对象,这样的类与类之间耦合性比较强,当依赖对象的改变时就需要修改源码。控制反转是将依赖对象的创建和查找的控制权交给bean容器,使用配置文件来描述bean与bean之间的依赖关系,只需要修改配置文件就可以实现对依赖对象的修改。
依赖注入的思想是通过反射机制实现的,在实例化一个类时,它通过反射调用类中set方法将事先保存在HashMap中的类属性注入到类中。
SpringIOC的初始化过程:
1.加载配置文件,将所有的beandefinition和属性放入map中。
2.调用getBean方法,从map中拿出 Class 对象,通过反射调用类中set方法进行实例化

AOP
能感受到的定义

AOP是对OOP的补充和完善,OOP引入封装,多态,继承来实现面向对象,只允许定义对象从上到下的关系,不能实现从左到右的关系。AOP面向切面编程,剖来对象的封装,将那些与业务无关却影响多个类的公共行为封装成可重用的模块,降低模块间的耦合,减少重复代码。

原理

本部分参考的博文
描述AOP的原理:假设当前调用目标类A,Spring用代理类包裹切面(Aspect),应用到目标A的对象创建新的代理对象(这个过程被称为织入(Weaving)),放入Spring的Bean中,可以看作代理类此时伪装成了目标类。使用拦截器拦截对目标类中方法的调用,在目标类执行之前,代理类先执行(比如做一下工作:权限认证,日志,事务,缓存等),之后执行目标类。

需要进一步说明的是切面:切面包括通知(Advice)和切入点(Pointcut)。通知(Advice)其实就是业务代码(比如实现日志的代码等),通知用before,after,around来定义什么时候执行,在目标类之前或者之后,或者环绕等。切入点是确定在哪里(哪个方法)通知的几个连接点。连接点(Joinpoint)是指方法前后或者抛出异常时等位置都可以作为连接点,没有特别的含义。而通知中定义的方法、属性,需要在应用到目标类,这个应用的过程称之为引入(introduction)。

那为什么代理类可以伪装成目标类,也就是说怎么生成这样的代理类?两种方式:
1.实现目标类相同的接口。spring会使用JDK的java.lang.reflect.Proxy类,它允许Spring动态生成一个新类来实现必要的接口,织入通知,并且把对这些接口的任何调用都转发到目标类。
2.子类。spring使用CGLIB库生成目标类的一个子类,在创建这个子类的时候,spring织入通知,并且把对这个子类的调用委托到目标类。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值