论坛首页 Java企业应用论坛

spring学习笔记--AOP代理对象【2】

浏览 2369 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2010-01-20  
续上一张 @~~@
这个是通过cglib来创建动态代理的 不需要实现PersonService接口
package javaeye;

import java.lang.reflect.Method;

import javaeye.service.impl.PersonServiceBean;

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 createProxyIntance(Object targetObject){
		this.targetObject = targetObject;
//原先是我们Proxy的instance来创建的,在这里我们用Enhancer来创建代理对象
		Enhancer enhancer = new Enhancer();
//设置一个父类--》就是目标类,enhancer继承了目标类(this.targerObject)的所有的方法(非final)进行覆盖
		enhancer.setSuperclass(this.targetObject.getClass());
//回调 跟jdk的回调一样的
		enhancer.setCallback(this);
//
		return enhancer.create();
	}
//下面的跟上一章的invoke()一样
	public Object intercept(Object proxy, Method method, Object[] args,
			MethodProxy  methodProxy) throws Throwable {
		PersonServiceBean bean = (PersonServiceBean) this.targetObject;
		Object result = null;
		if(bean.getUser()!=null){
			result = methodProxy.invoke(targetObject, args);
		}
		return result;
	}
}

测试类:
@Test public void proxyTest2(){
		CGlibProxyFactory factory = new CGlibProxyFactory();
		PersonServiceBean service = (PersonServiceBean) factory.createProxyIntance(new PersonServiceBean("javaeye"));
		service.save("javaeye");
	}

到此为止已经实现了简单的AOP了
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics