当前位置 : 主页 > 编程语言 > java >

cglib代理

来源:互联网 收集:自由互联 发布时间:2021-06-28
目标类 package com.liu.cglib;public class UserDao{public void insert() {System.out.println("============保存============");}} 代理类 package com.liu.cglib;import java.lang.reflect.Method;import net.sf.cglib.proxy.Enhancer;import net
目标类
package com.liu.cglib;


public class UserDao{

	public void insert() {
		System.out.println("============保存============");
	}

}
代理类
package com.liu.cglib;

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 ProxyFactory implements MethodInterceptor{
	
	//维护目标对象
	private Object target;
	
	public ProxyFactory(Object target){
		this.target = target;
	}
	
	public Object getProxyInstance(){
		//创建工具类
		Enhancer en = new Enhancer();
		//设置父类
		en.setSuperclass(target.getClass());
		//设置回调函数
		en.setCallback(this);
		
		return en.create();
	}

	@Override
	public Object intercept(Object obj, Method method, Object[] args,
			MethodProxy proxy) throws Throwable {
		System.out.println("========开启事务=========");
		Object returnValue = method.invoke(target,args);
		System.out.println("========结束事务=========");
		return returnValue;
	}

}
测试类
package com.liu.cglib;

import org.junit.Test;

public class App {
	
	@Test
	public void save(){
		
		UserDao proxy = (UserDao)new ProxyFactory(new UserDao()).getProxyInstance();
		proxy.insert();
	}
}
网友评论