package com;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MyDynaProxy implements InvocationHandler{
private Object obj = null;
//构造函数传入业务体
public MyDynaProxy(Object obj){
this.obj = obj;
}
public Object invoke(Object objProxy, Method method, Object[] args) throws Throwable {
//模拟公共代码实现部分
System.out.println("开始记录日志");
Object returnobj = null;
try{
//需要变换的业务部分
returnobj = method.invoke(obj, args);
}catch(Exception e){
e.printStackTrace();
}finally{
//模拟公共代码实现部分
System.out.println("结束记录日志");
}
return returnobj;
}
public static Object proxyFactory(Object facObj){
//装载真实主题类
Class cls = facObj.getClass();
//创建真实主题对象实例,第一个参数获取类装载器; 第二个参数被代理类的接口列表; 第三个参数为代理主题对象
return Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), new MyDynaProxy(facObj));
}
//测试main方法
public static void main(String[] args){
Operator p = (Operator) proxyFactory(new Login());
p.execute();
}
}
------------------------------
package com;
public interface Operator {
public void execute();
}
-------------
package com;
public class Login implements Operator{
public void execute() {
System.out.println("登录业务逻辑操作");
}
}
---------------------------
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class MyDynaProxy implements InvocationHandler{
private Object obj = null;
//构造函数传入业务体
public MyDynaProxy(Object obj){
this.obj = obj;
}
public Object invoke(Object objProxy, Method method, Object[] args) throws Throwable {
//模拟公共代码实现部分
System.out.println("开始记录日志");
Object returnobj = null;
try{
//需要变换的业务部分
returnobj = method.invoke(obj, args);
}catch(Exception e){
e.printStackTrace();
}finally{
//模拟公共代码实现部分
System.out.println("结束记录日志");
}
return returnobj;
}
public static Object proxyFactory(Object facObj){
//装载真实主题类
Class cls = facObj.getClass();
//创建真实主题对象实例,第一个参数获取类装载器; 第二个参数被代理类的接口列表; 第三个参数为代理主题对象
return Proxy.newProxyInstance(cls.getClassLoader(), cls.getInterfaces(), new MyDynaProxy(facObj));
}
//测试main方法
public static void main(String[] args){
Operator p = (Operator) proxyFactory(new Login());
p.execute();
}
}
------------------------------
package com;
public interface Operator {
public void execute();
}
-------------
package com;
public class Login implements Operator{
public void execute() {
System.out.println("登录业务逻辑操作");
}
}
---------------------------