spring AOP学习记录1

spring AOP 面向切面编程 Aspect Oriented Programming(适用于权限检查,日志记录,性能分析,事务管理,异常管理) 。

AOP实现原理是通过动态代理实现的。

JDK提供的动态代理(两个必要重要的类为Proxy、InvocationHandler),如果需要为某个类产生代理,这个类必须是实现某个接口的,否则使用JDK是无法为此类创建代理的。(Hibernate也可以实现动态代理,但是它却不需要此类实现接口,它是直接去修改二进制代码,使用的当然是cglib)。关于JDK动态代理可以参看博文“

Spring AOP的底层实现技术---JDK动态代理

  ”。
代理类里包含被代理类所实现接口里的所有方法,当调用代类里面的方法的时候,它会调用invocationHandler那个实现类去实现。
如代码:

1.    ForumService target new ForumServiceImpl();//目标业务类  

2.    // 将目标业务类和横切代码编织到一起  

3.     PerformaceHandler handler new PerformaceHandler(target);  

            //为编织了目标业务类逻辑和性能监视横切逻辑的handler创建代理类 

    4.    ForumService proxy (ForumService) Proxy.newProxyInstance(  

5.    target.getClass().getClassLoader(),  

6.        target.getClass().getInterfaces(),  

7.     handler);  

8.          // 操作代理实例  

            proxy.removeForum(10);  此处就是调用代理类里的方法,这个时候代理类就会交给handler去实现,调用invoke方法。

handler里的关键代码如下:


 

1. public Object invoke(Object proxy, Method method, Object[] args)  

2.    throws Throwable  

3.   PerformanceMonitor.begin(target.getClass().getName()+"."method.getName());  

4.   Object bj = method.invoke(target, args);//通过反射方法调用目标业务类的业务方法  

5.   PerformanceMonitor.end();  

6.   return obj;  

7.  }  




还有cglib也可以实现动态代理,它是通过操作二进制文件实现的。

2012--08-27 spring 21集完。。。待续
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值