使用CGLIB的代理技术

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

/**
 * 使用CGLIB创建代理对象工厂
 * 
 * @author 张明学
 */
public class CGLIBProxyFactory {
	/**
	 * 使用CGLIB创建代理对象(实际是目标对象的子类,覆盖了父类对象的方法)
	 * 
	 * @param target
	 *            目标对象
	 * @return
	 */
	public static Object createProxyIntance(final Object target) {
		Object proxy = null;
		Enhancer enhancer = new Enhancer();
		// 设置父类为目标对象
		enhancer.setSuperclass(target.getClass());
		enhancer.setCallback(new MethodInterceptor() {
			// arg0表示代理对象本身
			// arg1执行的方法(拦截的方法)
			// arg2方法的参数
			// arg3方法的代理对象
			public Object intercept(Object arg0, Method arg1, Object[] arg2,
					MethodProxy arg3) throws Throwable {
				System.out.println("执行的方法" + arg1.getName());
				Object result = arg3.invoke(target, arg2);
				return result;
			}
		});
		proxy = enhancer.create();
		return proxy;
	}
}

 测试:

public class StudentDao {
	
	public void save() {
		System.out.println("com.mengya.dao.StudentDao的save方法");
	}
	
}

 

public class CGLIBProxyTest {
	public static void main(String[] args) {
		StudentDao stuDao = (StudentDao) CGLIBProxyFactory.createProxyIntance(new StudentDao());
		stuDao.save();
	}
}

 

你可能感兴趣的:(DAO,.net)