不会健身的程序员
不是好作家

spring 1.x aop(一)aop简介

一、基本概念:

(1)目标对象(target)

就是被代理的对象,也就是具体的业务逻辑。比如userService

(2)切面  (Aspect)

交叉业务,也就是通用的业务逻辑,比如日志、事务。

(3)连接点 (Jointpoint)

切面可以插入的地点,主要有方法、属性

(4)切入点 (Pointcut)

指定哪些连接点可以应用切面/通知

(5)通知(Advice)

切面的具体实现

二、基本使用

比如我们现在想要给一个类代理,这个类是com.linjunlong.impl.PersonImpl,首先我们先在spring中配置

1.代理

1)ProxyFactoryBean

Spring的AOP实现是基于代理的,而在Spring里创建一个AOP代理的基本方法就是

使用org.springframework.aop.framework.ProxyFactoryBean

这里的配置重点是目标与拦截器。

实际创建的代理类型,有两种:代理接口和代理类。

下面我们看一下具体的配置。

(1)代理接口(JDK动态代理):

目标对象也可以用匿名内部bean的方式使用:

小林注:这里的依赖包只需要spring.jar,这个是1.x的,也就是我们只使用spring原生态aop,依赖包的下载:传送门,下载之后使用dist/spring.jar就能实现spring的基本功能

(2)代理类(CGLIB代理):

目标类不存在接口,只能使用CGLIB代理,

去掉proxyInterfaces属性

设置proxyTargetClass属性设为true或者忽略这个属性

目标类即使存在接口,也强制使用CGLIB代理:

设置proxyTargetClass属性设为true,甚至proxyInterfaces属性被设置的情况下仍然将实际使用基于CGLIB的代理。

小林注:使用cglib还需要用到cglib.jar asm.jar,这里我们直接用cglib-full-2.0.2.jar(cglib+asm),版本一定要是2.0.2。不然就算用2.0.1会报错。在拦截action的时候。

“全局”advisor

通过在一个拦截器名后添加一个星号,所有bean名字与星号之前部分相匹配的Advice都将被加入到advisor链中。

2)TransactionProxyFactoryBean

使用TransactionProxyFactoryBean时,我们通常都会用简化代理的方式进行配置。

你也许需要许多相似的代理定义,特别是定义事务性代理的时候。使用父子bean定义,以及内部bean定义,可以让代理定义大大得到极大的简化。

这个类我们在代理事务的时候经常用到,比如和hibernate,ibatis结合。

2.Advisor

预先了解的概念:Advisor=Advice+Pointcut,所以这里的配置重点是如何把Advice和Pointcut集成到一起。

除了Introduction Advice(和DefaultIntroductionAdvisor一起使用),任何advisor都可以和任何Advice一起工作。

具体的配置示例如下:

1)NameMatchMethodPointcutAdvisor(内部使用NameMatchMethodPointcut)

2)RegexpMethodPointcutAdvisor

在背后,如果使用J2SE 1.4或者以上版本,Spring将使用JdkRegexpMethodPointcut,在之前版本的虚拟机上,Spring将退回去使用Perl5RegexpMethodPointcut。

配置示例:

3)DefaultPointcutAdvisor(使用外部注入的Pointcut)

3.Advice

这里的重点是编程实现相应的接口。

spring中的通知类型
通知类型 接口 描述
Around org.aopaliance.intercept.MethodInterceptor 拦截对目标对象方法调用
Before org.springframework.aop.BeforeAdvice 在目标方法被调用前调用
After org.springframework.aop.AfterReturningAdvice 在目标方法被调用后调用
Throws org.springframework.aop.ThrowsAdvice 在目标方法抛异常时调用
赞(0)
转载请注明出处:小林博客 » spring 1.x aop(一)aop简介
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

谢主隆恩

支付宝扫一扫打赏

微信扫一扫打赏