Spring_AOP的理解

简介: Spring_AOP的理解

前言

AOP技术为业务模块所共同调用的逻辑或责任封装起来,便于减少系统的重复代码,降低模块之间的耦合度,并有利于未来的可操作性和可维护性。


一、AOP核心概念

1、横切关注点

对哪些方法进行拦截,拦截后怎么处理,这些关注点称之为横切关注点


2、切面(aspect)

类是对物体特征的抽象,切面就是对横切关注点的抽象


3、连接点(joinpoint)

被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中连接点指的就是被拦截到的方法,实际上连接点还可以是字段或者构造器


4、切入点(pointcut)

对连接点进行拦截的定义


Spring中AOP代理由Spring的IOC容器负责生成、管理,其依赖关系也由IOC容器负责管理。因此,AOP代理可以直接使用容器中的其它bean实例作为目标,这种关系可由IOC容器的依赖注入提供。

Spring创建代理的规则为:
1、默认使用Java动态代理来创建AOP代理,这样就可以为任何接口实例创建代理了
2、当需要代理的类不是代理接口的时候,Spring会切换为使用CGLIB代理,也可强制使用CGLIB


二、JDK动态代理和CGLIB动态的区别

JDK动态代理的实现是在运行时,根据一组接口定义,使用Proxy、InvocationHandler等工具类去生成一个代理类和代理类实例。

CGLIB动态代理在运行期扩展Java类与实现Java接口。Hibernate用它实现PO(Persistent Object 持久化对象)字节码的动态生成,Spring AOP用它提供方法的interception(拦截)


Cglib和jdk动态代理的区别

动态代理解决了方法之间的紧耦合,

IOC解决了类与类之间的紧耦合

1、Jdk动态代理:利用拦截器(必须实现InvocationHandler)加上反射机制生成一个代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理

2、 Cglib动态代理:利用ASM框架,对代理对象类生成的class文件加载进来,通过修改其字节码生成子类来处理

什么时候用cglib什么时候用jdk动态代理?

1、目标对象生成了接口 默认用JDK动态代理

2、如果目标对象使用了接口,可以强制使用cglib

3、如果目标对象没有实现接口,必须采用cglib库,Spring会自动在JDK动态代理和cglib之间转换


Spring如何选择是用JDK还是cglib?

1、当bean实现接口时,会用JDK代理模式

2、当bean没有实现接口,用cglib实现

相关文章
|
19天前
|
前端开发 Java Maven
Spring AOP
Spring AOP
20 1
|
1月前
|
Java 编译器 开发者
Spring的AOP理解
Spring的AOP理解
|
1月前
|
缓存 安全 Java
|
1月前
|
Java Spring
【spring(三)】AOP总结
【spring(三)】AOP总结
|
1月前
|
Java Spring
Spring AOP初步理解及使用(二)
Spring AOP初步理解及使用
35 0
Spring AOP初步理解及使用(二)
|
7月前
|
XML 缓存 监控
spring之aop
spring之aop
38 0
|
8月前
|
Java 程序员 编译器
对Spring AOP的理解
对Spring AOP的理解
32 0
|
11月前
|
缓存 Java 开发者
Spring中的AOP是什么?
AOP :面向切面编程
47 0
|
XML 缓存 Java
Spring AOP初步理解及使用
Spring AOP初步理解及使用
|
XML 缓存 安全