Spring学习笔记(14)----使用CGLIB实现AOP功能
2014-09-18 15:24
941 查看
好久没学习spring了,今天接着学习。
接着这上面的例子,在上面的例子中我们的UserManagerImpl类是实现了UserManager接口,如果UserManagerImpl没有实现任何接口要怎么办呢?应为创建代理对象时我们需要指定接口的。
由于没有时间接口,因此我们是不能这样创建代理接口的,这是我们需要借助第三方包来实现。在spring中提供了cglib-nodep-2.1_3.jar包。我们通过cglib创建代理对象。
下面就通过实例演示通过cglib创建代理对象。
首先创建CGlibProxyFactory,实现MethodInterceptor接口,接口中有一个intercept方法,当代理对象的方法被调用时会调用这个方法。
其实整个代码很前面的很相似,只是创建代理对象的方法不一样。
测试代码:
上面演示的几个事例是不借助与任何框架的情况下实现AOP的方法。
14_使用CGLIB实现AOP功能.rar (289 KB)
下载次数: 42
接着这上面的例子,在上面的例子中我们的UserManagerImpl类是实现了UserManager接口,如果UserManagerImpl没有实现任何接口要怎么办呢?应为创建代理对象时我们需要指定接口的。
Proxy.newProxyInstance(targetObject.getClass().getClassLoader(), targetObject.getClass().getInterfaces(), this);
由于没有时间接口,因此我们是不能这样创建代理接口的,这是我们需要借助第三方包来实现。在spring中提供了cglib-nodep-2.1_3.jar包。我们通过cglib创建代理对象。
下面就通过实例演示通过cglib创建代理对象。
首先创建CGlibProxyFactory,实现MethodInterceptor接口,接口中有一个intercept方法,当代理对象的方法被调用时会调用这个方法。
package com.szy.spring; import java.lang.reflect.Method; import net.sf.cglib.proxy.Enhancer; import net.sf.cglib.proxy.MethodInterceptor; import net.sf.cglib.proxy.MethodProxy; public class CGlibProxyFactory implements MethodInterceptor { private Object targetObject; public Object newProxy(Object targetObject) { this.targetObject=targetObject; Enhancer enhancer=new Enhancer(); enhancer.setSuperclass(this.targetObject.getClass()); enhancer.setCallback(this); //返回代理对象 return enhancer.create(); } /** * proxy 带来对象本身 * method 被拦截到的方法 * args 方法的参数 * methodProxy 方法的代理对象 */ public Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { checkSecurity(); Object ret=null; try { //调用目标对象的真实方法 ret=method.invoke(this.targetObject, args); //ret接受存在的返回值,不存在返回值则为Null } catch (Exception e) { e.printStackTrace(); } return ret; } public void checkSecurity() { System.out.println("--------UserManagerImpl.checkSecurity()----------"); } }
其实整个代码很前面的很相似,只是创建代理对象的方法不一样。
测试代码:
CGlibProxyFactory factory=new CGlibProxyFactory(); //创建代理对象,这是这个代理对象是UserManagerImpl的子类 UserManagerImpl userManager=(UserManagerImpl)factory.newProxy(new UserManagerImpl()); userManager.addUser("coolszy", "kuka");
上面演示的几个事例是不借助与任何框架的情况下实现AOP的方法。
14_使用CGLIB实现AOP功能.rar (289 KB)
下载次数: 42
相关文章推荐
- ITCAST视频-Spring学习笔记(使用CGLIB实现AOP功能与AOP概念解释)
- ITCAST视频-Spring学习笔记(使用JDK中的Proxy技术实现AOP功能)
- Spring学习笔记(14)----使用Spring的注解方式实现AOP
- ITCAST视频-Spring学习笔记(使用Spring配置文件实现AOP)
- ITCAST视频-Spring学习笔记(使用Spring的注解方式实现AOP入门)
- Spring学习笔记 —— AOP(面向切面编程) 之使用ProxyFactoryBean实现AOP
- spring学习笔记7--使用spring进行面向切面的(AOP)编程(1)注解方式实现
- 使用jdk和cglib实现spring的aop功能
- 16_传智播客Spring2.5视频教程_使用CGLIB实现AOP功能与AOP概念解释
- Spring学习笔记:使用代理实现AOP
- aop学习总结二------使用cglib动态代理简单实现aop功能
- ITCAST视频-Spring学习笔记(使用Spring的注解方式实现AOP的细节)
- 使用jdk和cglib实现spring的aop功能
- (8) 使用JDK中的Proxy技术实现AOP功能 以及 CGLIB生成代理
- 使用CGlib实现AOP功能
- 使用CGLIB实现AOP功能
- Spring学习笔记 使用XML配置实现Bean的auto-wiring (自动绑定)
- 框架学习之Spring 第三节 采用Spring实现AOP功能
- 使用CGLIB实现AOP功能与AOP概念解释
- Spring.NET学习笔记14——AOP的通知类型(基础篇)