Java 基于接口的动态代理

UserDao接口

1
2
3
4
5
6
package com.pry.cn;
 
public interface UserDao {
    public int add(int a,int b);
    public String update(String id);
}

  

UserDao实现类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
package com.pry.cn;
 
public class UserDaoImpl implements UserDao {
    @Override
    public int add(int a, int b) {
        System.out.println("add方法执行了");
        return a + b;
    }
 
    @Override
    public String update(String id) {
        System.out.println("update方法执行了");
        return id;
    }
}

  

代理实现方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class UserDaoProxy implements InvocationHandler {
    private Object obj;
 
    public UserDaoProxy(Object obj) {
        this.obj = obj;
    }
 
    @Override
    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
        System.out.println("增强方法执行前:" + method.getName() + "参数:" + Arrays.toString(args));
        Object res = method.invoke(obj, args);
        System.out.println("增强方法执行后:" + obj);
        return res;
    }
}

  

执行对象

1
2
3
4
5
6
7
8
public class MainRum {
    public static void main(String[] args) {
        Class[] interfaces = {UserDao.class};
        UserDaoImpl userDao = new UserDaoImpl();
        UserDao dao = (UserDao) Proxy.newProxyInstance(MainRum.class.getClassLoader(), interfaces, new UserDaoProxy(userDao));
        dao.add(2, 6);
    }
}

  

输出结果

1
2
3
增强方法执行前:add参数:[2, 6]
add方法执行了
增强方法执行后:com.pry.cn.UserDaoImpl@2503dbd3

  

posted @   MineLSG  阅读(193)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示