CGlib代理模式:

package CGLIB;

import java.lang.reflect.Method;

import JDK.Test;
import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy; /**
* 使用cglib动态代理
*
* @author student
*
*/
public class BookFacadeCglib extends Test implements MethodInterceptor {
private Object target; /**
* 创建代理对象
*
* @param target
* @return
*/
public Object getInstance(Object target) {
this.target = target;
Enhancer enhancer = new Enhancer();
enhancer.setSuperclass(this.target.getClass());
// 回调方法
enhancer.setCallback(this);
// 创建代理对象
return enhancer.create();
} @Override
// 回调方法
public Object intercept(Object obj, Method method, Object[] args,
MethodProxy proxy) throws Throwable {
System.out.println("事物开始");
proxy.invokeSuper(obj, args);
System.out.println("事物结束");
return null; } }
package CGLIB;

import JDK.Test;

public class BookFacadeImpl1 extends Test{
public void addBook() {
System.out.println("增加图书的普通方法...");
}
}
package CGLIB;

public class TestCglib {
public static void main(String[] args) {
BookFacadeCglib cglib=new BookFacadeCglib();
BookFacadeImpl1 bookCglib=(BookFacadeImpl1)cglib.getInstance(new BookFacadeImpl1());
bookCglib.addBook();
bookCglib.test_01();
}
}

JDK代理模式:

package JDK;

public interface BookFacade {
public void addBook();
public void delBook();
}
package JDK;

public class BookFacadeImpl extends Test implements BookFacade {

    @Override
public void addBook() {
System.out.println("增加图书方法。。。");
} @Override
public void delBook() {
System.out.println("删除图书方法。。。"); } }
package JDK;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; /**
* JDK动态代理代理类
*
* @author student
*
*/
public class BookFacadeProxy implements InvocationHandler {
private Object target;
/**
* 绑定委托对象并返回一个代理类
* @param target
* @return
*/
public Object bind(Object target) {
this.target = target;
//取得代理对象
return Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this); //要绑定接口(这是一个缺陷,cglib弥补了这一缺陷)
} @Override
/**
* 调用方法
*/
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
Object result=null;
System.out.println("事物开始");
//执行方法
result=method.invoke(target, args);
System.out.println("事物结束");
return result;
} }
package JDK;

public class Test {
public void test_01(){
System.out.println("test_01");
}
}
package JDK;

public class TestProxy {

    public static void main(String[] args) {
BookFacadeProxy proxy = new BookFacadeProxy();
BookFacade bookProxy = (BookFacade) proxy.bind(new BookFacadeImpl());
bookProxy.addBook();
bookProxy.delBook(); }
}
05-02 13:55