spring:创建一个动态代理

1.先创建一个接口user

public interface User {
    /**
     * 生成用户
     */
    void generate();

    /**
     * 修改用户信息
     */
    void modify();

    /**
     * 查看用户详情
     */
    void detail();
}

创建 关于User接口的实现类UserImpl

public class UserImpl implements User {
    @Override
    public void generate() {
        System.out.println("用户生成");
    }

    @Override
    public void modify() {
        System.out.println("用户修改信息");
    }

    @Override
    public void detail() {
        System.out.println("查看用户信息");
    }
}

 创建一个UserClient用于测试

public class UserClient {
    public static void main(String[] args) {
        //创建目标对象,用User接口new一个新的接口实现类,方便调用接口
        User user = new UserImpl();

    }
}

JDK动态代理技术主要用来

2.这时候我们就需要新建一个类UserInvocationHandler 来实现InvocationHandler(处理器)接口

public class UserInvocationHandler implements InvocationHandler {
//创建一个对象,并且提供一个构造方法
    private Object aa;

    public UserInvocationHandler(Object aa) {
        this.aa = aa;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        Object result = method.invoke(aa, args);
        return null;
    }
}

 3.在测试类中UserClient中使用

public class UserClient {
    public static void main(String[] args) {
//创建目标对象
        User user = new UserImpl();
//创建代理对象
//Object proxyObj = Proxy.newProxyInstance(类加载器, 代理类要实现的接口, 调用处理器)

        User u = (User) Proxy.newProxyInstance(user.getClass().getClassLoader(), user.getClass().getInterfaces(),new UserInvocationHandler(user));
       //调用detail()方法
        u.detail();
    }
}

4.我们在UserInvocationHandler类中method.invoke(aa, args)调用上面给的对象(aa)添加输出,并且给这个调用赋值,我们添加增强代码的目的完成

public class UserInvocationHandler implements InvocationHandler {
    private Object aa;

    public UserInvocationHandler(Object aa) {
        this.aa = aa;
    }

    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
//此处接口的目的就是为了写增强代码
        System.out.println("开始了");
        Object result = method.invoke(aa, args);
        System.out.println("结束了");
        return null;
    }
}

 5.调用方法

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值