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;
}
}
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;
}
}
相关文章推荐
- 由service层接口有什么用?引申到基于JDK原生和CGLIB动态代理实现spring事务管理的机制的思考
- java动态代理--代理接口无实现类
- java动态代理实现Proxy和InvocationHandler cglib
- 详解Java动态代理机制(二)----cglib实现动态代理
- Java动态代理(JDK接口代理和Cglib类代理)
- Java动态代理模式jdk和cglib的2种实现以及二者的区别(AOP面向切面的前奏)
- 深入理解java动态代理的两种实现方式(JDK/Cglib)
- java动态代理--代理接口无实现类
- 有接口的CGLIB动态代理实现
- 详解Java动态代理机制(二)----cglib实现动态代理
- Java动态代理模式jdk和cglib的2种实现以及二者的区别(AOP面向切面的前奏)
- Java 代理学习笔记 —— 浅析Cglib动态代理实现
- java反射和动态代理实现接口记录
- Java 动态代理的理解与Cglib动态代理实现
- Java动态代理之JDK实现和CGlib实现(简单易懂)
- java动态代理(JDK和cglib实现对比)
- Java的动态代理实现(JDK默认和CGLIB)
- Java动态代理实现接口方法
- (学习笔记)Java的JDK动态代理与CGLIB动态代理实现
- java提供类与cglib包实现动态代理