- 使用 JDK 动态代理,使用 Proxy 类里面的方法创建代理对象

| 第一参数,类加载器 |
| 第二参数,增强方法所在的类,这个类实现的接口,支持多个接口 |
| 第三参数,实现这个接口 InvocationHandler,创建代理对象,写增强的部分 |
| public class JDKProxy { |
| |
| public static void main(String[] args) { |
| |
| Class[] interfaces = {UserDao.class}; |
| UserDaoImpl userDao = new UserDaoImpl(); |
| UserDao dao = (UserDao) Proxy.newProxyInstance(JDKProxy.class.getClassLoader(), interfaces, new UserDaoProxy(userDao)); |
| int result = dao.add(1, 2); |
| System.out.println("result:"+result); |
| } |
| |
| } |
| |
| |
| 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; |
| } |
| |
| } |
| |
| # 控制台 |
| 方法之前执行....add :传递的参数...[1, 2] |
| add方法执行了..... |
| 方法之后执行....com.ychen.spring.dao2.UserDaoImpl@3c09711b |
| result:3 |
| |
| Process finished with exit code 0 |
| 连接点:类里面有哪些方法可以被增强,这些方法就被称为连接点 |
| 切入点:类里面真正被增强的方法称为切入点 |
| 通知:对方法添加的逻辑部分 |
| 通知类型: |
| 前置通知 |
| 后置通知 |
| 环绕通知 |
| 异常通知 |
| 最终通知 |
| 切面:把通知应用到切入点的过程 |
| AspectJ 不是 Spring 组成部分,独立 AOP 框架,一般把 AspectJ 和 Spirng 框架一起使 |
| 用,进行 AOP 操作 |
-
导入所需依赖

-
切入点表达式
| 切入点表达式作用:知道对哪个类里面的哪个方法进行增强 |
| 语法结构: execution([权限修饰符] [返回类型] [类全路径] [方法名称]([参数列表]) ) |
| 案例1:对 com.atguigu.dao.BookDao 类里面的 add 进行增强 |
| execution(* com.atguigu.dao.BookDao.add(..)) |
| |
| 案例2:对 com.atguigu.dao.BookDao 类里面的所有的方法进行增强 |
| execution(* com.atguigu.dao.BookDao.* (..)) |
| |
| 案例3:对 com.atguigu.dao 包里面所有类,类里面所有方法进行增强 |
| execution(* com.atguigu.dao.*.* (..)) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术