AOP jdk动态代理
一:
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动态代理相关推荐
- Spring 初识Aop JDK动态代理实现 原理初显
Spring 初识Aop JDK动态代理实现 原理初显 一.项目结构 二.具体步骤: 1.创建maven项目 创建好包结构 2.写一个TestDao接口 及实现类 3. 写一个自己的切面类 4.jav ...
- Spring : Spring Aop JDK动态代理调用过程
1.美图 2.概述 JDK动态代理参考 : JDK动态代理 3.源码 打开JdkDynamicAopProxy类,查看invoke方法: /*** Implementation of {@code I ...
- 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 ...
- 【spring】初识aop(面向切面编程) 使用jdk动态代理
BankServiceIImple.java 代码实现: package com.zzxtit.aop;import java.math.BigDecimal;public interface Ban ...
- aop的四种增强以及JDK动态代理、Cglib动态代理
动态代理 AOP底层实现:有接口自动应用的就是JDK动态代理 (1).JDK 在运行时运行时注入 本质:在内存中构建出接口的实现类 特点:被代理对象,必须有接口 实例: import java.lan ...
- Spring AOP基础—JDK动态代理
JDK动态代理主要涉及到java.lang.reflect包中的两个类:Proxy和InvocationHandler.其中InvocationHandler动态创建一个符合某一接口的实例,生成目标类 ...
- AOP的底层实现-CGLIB动态代理和JDK动态代理
AOP是目前Spring框架中的核心之一,在应用中具有非常重要的作用,也是Spring其他组件的基础.它是一种面向切面编程的思想.关于AOP的基础知识,相信多数童鞋都已经了如指掌,我们就略过这部分,来 ...
- Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题
Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代理的问题 参考文章: (1)Spring AOP动态代理实现,解决Spring Boot中无法正常启用JDK动态代 ...
- spring中aop默认使用jdk动态代理,springboot2以后默认使用cglib来实现动态代理详解
Spring5 AOP 默认使用 Cglib 了?我第一次听到这个说法是在一个微信群里: 真的假的?查阅文档 刚看到这个说法的时候,我是保持怀疑态度的. 大家都知道 Spring5 之前的版本 AOP ...
最新文章
- 第十七届全国大学生智能车竞赛完全模型组 I 型车模数据
- Intel主动管理技术用例-远程诊断、远程修复
- 自定义Android标题栏TitleBar布局
- 当Sklearn遇上Plotly,会擦出怎样的火花?
- mockJs文档(一)
- 前端学习(237):IE条件注释法
- skynet源码分析5:lua绑定之地基
- amd核芯显卡控制面板自定义分辨率_电脑显示器分辨率超频教程:1080P超2K分辨率的方法...
- 论文管理:zotero的安装和插件使用
- 高端游戏计算机电源外形规格,游戏新高度!实述高端电源选购技巧
- Python-QQ聊天记录分析-jieba+wordcloud
- 参加第五届“软件杯”记录
- Android常用布局-02
- 张钹院士:清华大学AI研究院要孵化人工智能界的BAT
- 亿级数据服务平台:跟低效率、指标难统一的数仓说再见!
- 学 Python 必看的书单汇总
- 安科瑞智能操控无线测温装置在江苏某化工产业园项目的应用
- nod32用户名获取器_内置调试器的nod​​ejs
- web数字地球_成为地球上最糟糕的Web设计师的13个步骤
- 漆包线制作空芯线圈电感方法
热门文章
- 无法从Windows上的资产index.android.bundle加载脚本
- 演示电脑小白安装windows11系统教程
- Linux vim
- 一阶rc电路时间常数_关于RC延时电路的延时时间计算
- STM32:GPIO配置说明
- 全向移动机器人参数校准方法思路
- 服务器 上传文件进度,Java动态显示文件上传进度实现代码
- php variables,浅析PHP原理之变量(Variables inside PHP)
- style样式包(HTML、CSS)
- Eigen教程(3)之矩阵和向量的运算