动态代理

接口

package proxyTest;

/**
 * ClassName:Service
 * Package:proxyTest
 * Description:
 *
 * @Date:2020/8/6 10:01
 * @Author:DangWei
 */
public interface Service {
    void add();

    void delete();

    void update();

    void select();
}

接口实现类

package proxyTest;

/**
 * ClassName:ServiceImpl
 * Package:proxyTest
 * Description:
 *
 * @Date:2020/8/6 10:02
 * @Author:DangWei
 */
public class ServiceImpl implements Service{

    @Override
    public void add() {
        System.out.println("执行了添加操作");
    }

    @Override
    public void delete() {
        System.out.println("执行了删除操作");
    }

    @Override
    public void update() {
        System.out.println("执行了更新操作");
    }

    @Override
    public void select() {
        System.out.println("执行了查询操作");
    }
}

代理类

package proxyTest;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * ClassName:MyProxy
 * Package:proxyTest
 * Description:
 *
 * @Date:2020/8/6 10:00
 * @Author:DangWei
 */
public class MyProxy implements InvocationHandler {
    //被代理类,也就是目标类
    Object target;

    public void setTarget(Object target){
        this.target=target;
    }

    //得到代理类的实例对象
    //第一个参数:类的加载器
    //第二个参数:被代理的接口
    //第三个参数:InvocationHandler
    public Object getProxy(){
        return Proxy.newProxyInstance(getClass().getClassLoader(),
                target.getClass().getInterfaces(),
                this);
    }

    //调用被代理类(目标类)的方法
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println(method.getName()+"方法的前置增强");
        method.invoke(target,args);
        System.out.println(method.getName()+"方法的后置增强");
        return null;
    }
}

测试

public class Main {
    public static void main(String[] args) {
        //目标类
        ServiceImpl service=new ServiceImpl();

        //得到一个代理类
        MyProxy myproxy=new MyProxy();
        myproxy.setTarget(service);

        //得到代理类的实例对象
        Service proxy= (Service) myproxy.getProxy();

        proxy.add();
        System.out.println("==========================我是分割线===================================");
        proxy.delete();
        System.out.println("==========================我是分割线===================================");
        proxy.update();
        System.out.println("==========================我是分割线===================================");
        proxy.select();
    }
}

结果

add方法的前置增强
执行了添加操作
add方法的后置增强
==========================我是分割线===================================
delete方法的前置增强
执行了删除操作
delete方法的后置增强
==========================我是分割线===================================
update方法的前置增强
执行了更新操作
update方法的后置增强
==========================我是分割线===================================
select方法的前置增强
执行了查询操作
select方法的后置增强

Process finished with exit code 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值