Spring AOP

      简单的来讲,我个人理解Spring Aop 的实现,是通过Java 编写来实现通知,Spring 的配置文件来织入通知。这便是Spring 的Aop。

      Spring 对Aop 的实现有两种方式:1)目标对象实现某个接口,那么可以通过java.lang.reflect.Proxy 类来实现。2)目标对象没有实现任何的接口,那么只能通过使用cjlib 类来实现子类的生成。注意:1)标记为final 的方法是不能实现Aop 的。2)接口创建代理优于类创建代理。 应该注意到的是Spring 只支持方法连接点,并不支持属性连接点。

      那么Spring 提供了几种通知类型呢?4种通知类型。它们分别是MethodInterceptor,BeforeAdvice,AfterReturningAdvice和ThrowsAdvice。从名字中我们可以发现它们都是被织入在方法调用的各个地方(方法调用周围,方法调用之前,方法调用调用之后和方法抛出异常时)。  

      通知定义好之后,我们就要来看Spring 的切入点如何定义了。当然在Spring 中指定了通知也是可以使用的,如果这样通知将织入到所有的连接点上,即接口的所有方法上面。通过定义切入点我们可以精确切入点而不再是接口的所有方法,既有选择的选择连接点使其成为切入点。在Spring 中切入点的核心接口是Pointcut 接口。Pointcut 接口提供了两个方法:getClassFilter()和getMethodMatcher()方法。getClassFilter()方法用于确定哪些类需要织入通知,getMethodMatcher()方法则用于确定类中的哪些方法织入通知。至于具体的ClassFilter 和MethodMatcher 接口这里就不进行介绍了。我将会以后进行具体的介绍说明。

      需要说明一点的是Spring 的切入点有两种方式:静态切入点和动态切入点。动态切入点目标方法每次调用时都会判断是否织入通知,这就降低了程序的性能,因此如果可以应该尽量使用静态切入点。Spring 已经为我们提供了一些切入点的实现,这些实现我将在以后博客中进行具体的介绍。:) 

      最后不得不提及Spring 提供了PointcutAdvisor 接口,它把通知和切入点组合到一个对象之中。这有助于在Spring 中更加简便的使用Aop。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值