代码:
package constxiong;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* 测试动态代理
* @author ConstXiong
*/
public class TestDynamicProxy implements InvocationHandler {
public static void main(String[] args) {
TestDynamicProxy proxy = new TestDynamicProxy(new AImpl());
A a = (A)proxy.getProxy();
a.say();
}
private Object target;
public TestDynamicProxy(Object target) {
this.target = target;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("before...");
Object result = method.invoke(target, args);
System.out.println("after...");
return result;
}
public <T> T getProxy() {
return (T) Proxy.newProxyInstance(target.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
}
}
interface A {
void say();
}
class AImpl implements A{
@Override
public void say() {
System.out.println("a");
}
}
打印:
before...
a
after...
【Java学习资源】整理推荐
- Java 8 Stream API Demo
- Druid 使用
- 借助 libreoffice,word 转 pdf 体验
- Java 动态代理
- openjdk jol 工具打印 Java 对象内存布局
- Spring整合MyBatis
- MyBatis 自定义插件
- MyBatis 延迟加载
- MyBatis 1对1 1对多 关联查询
- MyBatis insert 获取自增主键
- MyBatis 批量插入
- 分页插件 Mybatis-PageHelper
- MyBatis 原生使用
- Sharding-JDBC 实现分库分表
- JDK1.8 中的日期与时间 API
- Sharding-JDBC 实现读写分离
【Java面试题与答案】整理推荐