package com.xxx.proxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
* @Author 陈平安
* @Date 2022/6/14 9:48
* @PackageName:com.xxx.proxy
* @ClassName: JdkHandle
* @Description: TODO
* @Version 1.0
*/
public class JdkHandle implements InvocationHandler {
private Object target;
public JdkHandle(Object target) {
this.target = target;
}
public Object getProxy() {
Object object = Proxy.newProxyInstance(this.getClass().getClassLoader(),
target.getClass().getInterfaces(), this);
System.out.println("==========================");
System.out.println(object.getClass().getName());
System.out.println("==========================");
return object;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("==========================");
System.out.println(proxy.getClass().getName());
System.out.println("==========================");
System.out.println(
"before.............."
);
// System.out.println(proxy);
System.out.println(method);
System.out.println(target);
//target = com.xxx.proxy.You@2b193f2d
//target == System.out.println(object);
//public abstract void com.xxx.proxy.Mary.toMary()
Object object = method.invoke(target, args);
System.out.println(
"after.............."
); System.out.println("==========================");
System.out.println(object);
return object;
}
}
package com.xxx.proxy;
/**
* @Author 陈平安
* @Date 2022/6/14 9:04
* @PackageName:com.xxx.proxy
* @ClassName: MarryCompany
* @Description: TODO
* @Version 1.0
*/
//代理人
//代表用户完成任务
//同时可以完成增强任务
public class MarryCompany implements Mary {
private Mary mary;
public MarryCompany(Mary mary) {
this.mary = mary;
}
@Override
public void toMary() {
//增强
before();
mary.toMary();
//增强
after();
}
private void after() {
System.out.println("新人百年好合...........");
}
private void before() {
System.out.println("欢迎各位来宾........");
}
}
package com.xxx.proxy;
/**
* @Author 陈平安
* @Date 2022/6/14 9:03
* @PackageName:com.xxx.proxy
* @ClassName: Mary
* @Description: TODO
* @Version 1.0
*/
//定义用户行为
public interface Mary {
public void toMary();
}
package com.xxx.proxy;
/**
* @Author 陈平安
* @Date 2022/6/14 9:54
* @PackageName:com.xxx.proxy
* @ClassName: test
* @Description: TODO
* @Version 1.0
*/
public class test {
public static void main(String[] args) {
System.getProperties().put("sun.misc.ProxyGenerator.saveGeneratedFiles","true");
You you = new You();
JdkHandle handle = new JdkHandle(you);
Mary mary = (Mary) handle.getProxy();//you
System.out.println(mary+"-----==");
//说名 mary == you
mary.toMary();
System.out.println(mary.toString());
}
}
package com.xxx.proxy;
/**
* @Author 陈平安
* @Date 2022/6/14 9:04
* @PackageName:com.xxx.proxy
* @ClassName: You
* @Description: TODO
* @Version 1.0
*/
public class You implements Mary {
//本身用户行为要完成某些自己的任务,好比本文,尽管有婚庆公司完成婚礼的布置,但是,婚礼上,
//新人还是要去的
//所以也要完成继承任务接口,实现接口方法。
@Override
public void toMary() {
System.out.println("我要结婚了.........");
}
}