您的位置:首页 > 编程语言 > Java开发

java动态代理2 (cglib 不用实现接口)

2012-05-18 13:37 555 查看
ITest.java

package proxy2;

public interface ITest {

 public void test(String str);

}

 

TestImpl1.java

package proxy2;

public class TestImpl1 implements ITest {

 @Override

 public void test(String str) {

  System.out.println(str + " invoked!");

 }

}

 

TestImpl2.java

package proxy2;

public class TestImpl2 implements ITest {

 @Override

 public void test(String str) {

  System.out.println(str + " invoked!");

 }

}

 

TestProxy.java

package proxy2;

import java.lang.reflect.Method;

import net.sf.cglib.proxy.Enhancer;

import net.sf.cglib.proxy.MethodInterceptor;

import net.sf.cglib.proxy.MethodProxy;

 

//cglib动态代理代理类
public class TestProxy implements MethodInterceptor {

 private Object target;

 public TestProxy(Object target) {

  super();

  this.target = target;

 }

 

 // 取得代理对象
 public Object getInstance() {

  Enhancer enhancer = new Enhancer();

  enhancer.setSuperclass(this.target.getClass());

  // 回调方法

  enhancer.setCallback(this);

  // 创建代理对象

  return enhancer.create();

 }

 

 @Override

 public Object intercept(Object arg0, Method arg1, Object[] arg2,

   MethodProxy arg3) throws Throwable {

  System.out.println("事物开始");

  arg3.invokeSuper(arg0, arg2);

  System.out.println("事物结束");

  return null;

 }

}

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息