Spring中AOP就是使用代理模式来完成的,而因为代理有两种,一种是JDK代理需要有接口,一种字节码增强技术实现的代理Cglib。
因为都有各自使用的场景和有点,所以Spring中都实现,而如何选择呢?就是Spring的策略。 下面看这个代理图。
AopProxy是一个代理接口,实现就是Jdk动态代理和Cglib代理。而具体的选择就是AopProxyFactory代理工厂来实现的。
AopProxyFactory代理工厂的定义很简单,获取代理类。具体实现是DefaultAopProxyFactory
DefaultAopProxyFactory定义了生成代理类的策略。
如果有接口或者已经是JDK代理类就用JdkDynamicAopProxy动态代理,否则用ObjenesisCglibAopProxy代理
以上就是Spring关于代理策略的问题.
这节我们主要讲Spring中AOP的PointCut切入点
首先我们还提出一个问题
什么是切点? 如何拦截这个切点。
这就是一个切点,他可能是拦截一个注解,或者是拦截一个方法,或者是根据正则来拦截。
这些Spring中都有现成的实现。我们简单介绍下。先写将要被代理的类
NameMatchMethodPointcutAdvisor
根据名字就知道是根据名字来拦截
JdkRegexpMethodPointcut
根据正则来拦截
AnnotationMatchingPointcut
根据注解来拦截
以上就是Pointcut切入点的知识,读完这篇要明白什么是切入点,其次要知道有哪些方法拦截,我们可以根据Spring的这些功能来轻松实现很多的代理功能。
閱讀更多 軟件編程指南 的文章