package Demo.java3.动态代理;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.regex.Pattern;
/*
动态代理
*/
interface Jiekou //代理接口
{
String L1(String a);
void L2();
}
class GeneralMethod //通用方法 体系动态代理与AOP(每次只每个类相同的方法,不改变都需要的方法)
{
public void Method1() //通用方法1
{
System.out.println("===================方法1==================");
}
public void Method2() //通用方法2
{
System.out.println("===================方法2==================");
}
}
class ProsyClass implements Jiekou //被代理类
{
@Override
public String L1(String a) {
System.out.println("你好我喜欢"+a);
return a;
}
@Override
public void L2() {
System.out.println("你好啊我是void空参数代理类");
}
}
class ProxyClass //所有东西的代理类
{
static Object proxyclass(Object obj) //放入被代理类
{
Achieve ac=new Achieve();
ac.setObj(obj);//传输过去代理类 方便那边调用
Object o = Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), ac);
//代理类的加载器 代理类要实现的接口列表 代理类被实现的方法调用InvocationHandler方法中的invoke方法将方法调用分派到的调用处理程序
return o;
}
}
class Achieve implements InvocationHandler//实现类
{
private Object obj; //传输进来被代理类
public void setObj(Object obj) {
this.obj = obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable //对被代理类操作
{
GeneralMethod gm=new GeneralMethod();//调用他们都不需要被改变的方法 体系动态代理与AOP(每次只每个类相同的方法,不改变都需要的方法)
gm.Method1();//方法1(AOP)
Object o = method.invoke(obj, args); //传输被代理类的类名,代理的参数名
gm.Method2();//方法2(AOP)
return o;
}
}
public class 代理 {
public static void main(String[] args) {
ProsyClass pr=new ProsyClass();//实例化被代理类
Jiekou jk1 = (Jiekou) ProxyClass.proxyclass(pr);//放入代理类 转换成代理类接口
//第一个方法
String s = jk1.L1("你啊");
System.out.println(s); /* 你啊*/
//第2个方法
jk1.L2();
/* 调用一次方法执行一次
===================方法1==================
你好我喜欢你啊
===================方法2==================
你啊
===================方法1==================
你好啊我是void空参数代理类
===================方法2==================
*/
}
}
JAVA-动态代理和AOP
最新推荐文章于 2024-07-25 07:00:00 发布
本文详细介绍了如何使用Java动态代理实现面向切面编程(AOP),通过创建代理类并利用InvocationHandler接口,实现在ProsyClass中添加通用方法。实例演示了如何调用被代理类的方法并应用AOP特性。
摘要由CSDN通过智能技术生成