随笔四

Spring的AOP思想:
在这里插入图片描述
AOP术语:
在这里插入图片描述
OOP(Object-Oriented Programing,面向对象编程)

–什么是AOP:

AOP Aspect Oriented Programing 面向切面编程
AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视、事务管理、安全检查、缓存),Spring AOP使用纯 Java 实现,不需要专门的编译过程和类加载器,在运行期间通过代理方式向目标类织入增强代码;AspectJ 是一个基于Java语言的AOP框架,Spring2.0开始,Spring AOP 引入对Aspect的支持,AspectJ扩展了Java语言,提供了一个专门的编译器,在编译时提供横向代码织入。

–AOP底层原理:

就是代理机制:
*动态代理(JDK中使用)
*JDK的动态代理,对实现了接口的类生成代理
*CGLib代理机制:对类生成代理

–AOP相关术语:

Joinpoint(连接点):所谓连接点是指那些被拦截到的点。在spring中,这些点指的是方法,因为spring只支持方法类型的连接点.

Pointcut(切入点):所谓切入点是指我们要对哪些Joinpoint进行拦截的定义.

Advice(通知/增强):所谓通知是指拦截到Joinpoint之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知(切面要完成的功能)

Introduction(引介):引介是一种特殊的通知在不修改类代码的前提下,Introduction可以在运行期为类动态地添加一些方法或Field.

Target(目标对象):代理的目标对象

Weaving(织入):是指把增强应用到目标对象来创建新的代理对象的过程. spring采用动态代理织入,而AspectJ采用编译期织入和类装在期织入

Proxy(代理):一个类被AOP织入增强后,就产生一个结果代理类

Aspect(切面): 是切入点和通知(引介)的结合

–Spring在运行期,生成动态代理对象,不需要特殊的编译器
–Spring AOP的底层就是通过JDK动态代理或CGLib动态代理技术 为目标Bean执行横向织入
* 1.若目标对象实现了若干接口,spring使用JDK的java.lang.reflect.Proxy类代理。
* 2.若目标对象没有实现任何接口,spring使用CGLIB库生成目标对象的子类。
–程序中应优先对接口创建代理,便于程序解耦维护
–标记为final的方法,不能被代理,因为无法进行覆盖
*JDK动态代理,是针对接口生成子类,接口中方法不能使用final修饰
*CGLib 是针对目标类生产子类,因此类或方法 不能使final的
–Spring只支持方法连接点,不提供属性连接

Spring AOP切面类型:

*Advisor:代表一般切面,Advice本身就是一个切面,对目标类所有方法进行拦截
*PointcutAdvisor:代表具有切点的切面,可以指定拦截目标类那些方法
*IntroductionAdvisor:代表引介切面,针对引介通知而使用切面(了解)

自动创建代理:

–BeanNameAutoProxyCreator 根据Bean名创建代理
–DefaultAdvisorAutoProxyCreator 根据Advisor本身包含信息创建代理
–AnnotationAwareAspectJAutoProxyCreator 基于Bean中的AspectJ 注解进行自动代理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值