package com.dx.test;
/**
* 业务接口
* @author xiangzi
*
*/
public interface Subject {
public void dealFirstMethod();
public void dealSecondMethod(int a);
}
package com.dx.test;
/**
* 业务接口实现
* @author xiangzi
*
*/
public class RealSubject implements Subject{
@Override
public void dealFirstMethod() {
System.out.println("处理业务逻辑1。。。");
}
@Override
public void dealSecondMethod(int a) {
System.out.println("处理业务逻辑2。。。"+a);
}
}
package com.dx.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
/**
* 动态代理类
*
* @author xiangzi
*
*/
public class DynamicSubject implements InvocationHandler {
private Object obj;
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public DynamicSubject(Object obj) {
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("处理前。。。。");
method.invoke(obj, args);
System.out.println("处理后。。。。");
return null;
}
}
package com.dx.test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Proxy;
/**
* 测试
*
* @author xiangzi
*
*/
public class MainTest {
public static void main(String[] args) {
Subject rs = new RealSubject();// 这里指定被代理类
InvocationHandler ds = new DynamicSubject(rs);
Class<?> cls = rs.getClass();
// 以下是一次性生成代理,获取实例
Subject subject = (Subject) Proxy.newProxyInstance(
cls.getClassLoader(), cls.getInterfaces(), ds);
//执行方法
subject.dealFirstMethod();
System.out.println("==============");
subject.dealSecondMethod(5);
}
}
测试结果:
处理前。。。。
处理业务逻辑1。。。
处理后。。。。
==============
处理前。。。。
处理业务逻辑2。。。5
处理后。。。。