JAVA-动态代理和AOP

本文详细介绍了如何使用Java动态代理实现面向切面编程(AOP),通过创建代理类并利用InvocationHandler接口,实现在ProsyClass中添加通用方法。实例演示了如何调用被代理类的方法并应用AOP特性。
摘要由CSDN通过智能技术生成
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==================
         */
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

游迹AI

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值