一:

jdk动态代理是Spring AOP默认的代理方法。要求 被代理类要实现接口,只有接口里的方法才能被代理,主要步骤是先创建接口,接口里创建要被代理的方法,然后定义一个实现类实现该接口,接着将被代理对象注入到一个中间对象,中间对象实现InvocationHandler接口,实现该接口可以在 被代理对象调用它的方法前后插入一些代码。Proxy.newProxyInstance()能利用中间对象来生产代理对象。

二:

(1)创建接口:

package net.wang.aop;/*** 被代理对象必须实现的接口* @author LiuRuoWang*/
public interface UserService {public void addUser(User user);public User getUser(int id);
}

(2)创建实现类:

package net.wang.aop;/*** 被代理对象,必须实现接口* @author LiuRuoWang*/
public class UserServiceImpl implements UserService{public void addUser(User user) {System.out.println("add User!");}public User getUser(int id) {User user=new User();user.setId(id);System.out.println("get User!");return user;}}

(3)创建代理中间类

package net.wang.aop;import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;/*** 代理中间类* @author LiuRuoWang*/
public class ProxyUtil implements InvocationHandler{//被代理对象private Object target;public void setTarget(Object target) {this.target = target;}public Object getTarget() {return target;}public ProxyUtil(Object target){this.target=target;}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("do sth before!");method.invoke(target, args);System.out.println("do sth after!");return null;}}

(4)pojo类:

package net.wang.aop;/*** User pojo类* @author LiuRuoWang*/
public class User {private Integer id;private String name;public void setId(Integer id) {this.id = id;}public Integer getId() {return id;}public void setName(String name) {this.name = name;}public String getName() {return name;}
}

(5)测试结果

package net.wang.aop;import java.lang.reflect.Proxy;public class ProxyTest {public static void main(String[] args) {Object proxyedObject = new UserServiceImpl();ProxyUtil proxyUtils = new ProxyUtil(proxyedObject);//生成代理对象,并对这些接口进行代理UserService proxyObject = (UserService) Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), UserServiceImpl.class.getInterfaces(),proxyUtils);proxyObject.getUser(1);proxyObject.addUser(new User()); }
}

(6)

转载于:https://www.cnblogs.com/liuruowang/p/4544710.html

AOP jdk动态代理相关推荐

  1. Spring 初识Aop JDK动态代理实现 原理初显

    Spring 初识Aop JDK动态代理实现 原理初显 一.项目结构 二.具体步骤: 1.创建maven项目 创建好包结构 2.写一个TestDao接口 及实现类 3. 写一个自己的切面类 4.jav ...

  2. Spring : Spring Aop JDK动态代理调用过程

    1.美图 2.概述 JDK动态代理参考 : JDK动态代理 3.源码 打开JdkDynamicAopProxy类,查看invoke方法: /*** Implementation of {@code I ...

  3. Spring AOP JDK动态代理报错:class com.sun.proxy.$Proxy0 cannot be cast to class com.aha.Spring5.jdkproxy.

    报错时候的书写 public class JDKProxy {public static void main(String[] args) {UserDaoImpl userDao = new Use ...

  4. 【spring】初识aop(面向切面编程) 使用jdk动态代理

    BankServiceIImple.java 代码实现: package com.zzxtit.aop;import java.math.BigDecimal;public interface Ban ...

  5. aop的四种增强以及JDK动态代理、Cglib动态代理

    动态代理 AOP底层实现:有接口自动应用的就是JDK动态代理 (1).JDK 在运行时运行时注入 本质:在内存中构建出接口的实现类 特点:被代理对象,必须有接口 实例: import java.lan ...

  6. Spring AOP基础—JDK动态代理

    JDK动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler.其中InvocationHandler动态创建一个符合某一接口的实例,生成目标类 ...

  7. AOP的底层实现-CGLIB动态代理和JDK动态代理

    AOP是目前Spring框架中的核心之一,在应用中具有非常重要的作用,也是Spring其他组件的基础.它是一种面向切面编程的思想.关于AOP的基础知识,相信多数童鞋都已经了如指掌,我们就略过这部分,来 ...

  8. Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题

    Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题 参考文章: (1)Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代 ...

  9. spring中aop默认使用jdk动态代理,springboot2以后默认使用cglib来实现动态代理详解

    Spring5 AOP 默认使用 Cglib 了?我第一次听到这个说法是在一个微信群里: 真的假的?查阅文档 刚看到这个说法的时候,我是保持怀疑态度的. 大家都知道 Spring5 之前的版本 AOP ...

最新文章

  1. 第十七届全国大学生智能车竞赛完全模型组 I 型车模数据
  2. Intel主动管理技术用例-远程诊断、远程修复
  3. 自定义Android标题栏TitleBar布局
  4. 当Sklearn遇上Plotly,会擦出怎样的火花?
  5. mockJs文档(一)
  6. 前端学习(237):IE条件注释法
  7. skynet源码分析5:lua绑定之地基
  8. amd核芯显卡控制面板自定义分辨率_电脑显示器分辨率超频教程:1080P超2K分辨率的方法...
  9. 论文管理:zotero的安装和插件使用
  10. 高端游戏计算机电源外形规格,游戏新高度!实述高端电源选购技巧
  11. Python-QQ聊天记录分析-jieba+wordcloud
  12. 参加第五届“软件杯”记录
  13. Android常用布局-02
  14. 张钹院士:清华大学AI研究院要孵化人工智能界的BAT
  15. 亿级数据服务平台:跟低效率、指标难统一的数仓说再见!
  16. 学 Python 必看的书单汇总
  17. 安科瑞智能操控无线测温装置在江苏某化工产业园项目的应用
  18. nod32用户名获取器_内置调试器的nod​​ejs
  19. web数字地球_成为地球上最糟糕的Web设计师的13个步骤
  20. 漆包线制作空芯线圈电感方法

热门文章

  1. 无法从Windows上的资产index.android.bundle加载脚本
  2. 演示电脑小白安装windows11系统教程
  3. Linux vim
  4. 一阶rc电路时间常数_关于RC延时电路的延时时间计算
  5. STM32:GPIO配置说明
  6. 全向移动机器人参数校准方法思路
  7. 服务器 上传文件进度,Java动态显示文件上传进度实现代码
  8. php variables,浅析PHP原理之变量(Variables inside PHP)
  9. style样式包(HTML、CSS)
  10. Eigen教程(3)之矩阵和向量的运算