Java的反射框架提供了动态代理机制,允许在运行期对目标类生成代理,避免重复开发,实现上下文切入的功能。

代码是最好的交流语言:

Subject接口

RealSubject实现接口

SubjectHandler实现上下文切入,非显式动态代理功能

interface Subject {public String request(int[] array);public void anotherRequest();
}

public class RealSubject implements Subject {@Overridepublic String request(int[] array) {System.out.println("real do something");for(int at:array) {System.out.print(at+" ");}System.out.println();return "";}@Overridepublic void anotherRequest() {System.out.println("anotherRequest");}public void ownMethod() {System.out.println("ownMethod");}}

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;public class SubjectHandler implements InvocationHandler{private Subject subject;public SubjectHandler(Subject _subject) {subject = _subject;}@Overridepublic Object invoke(Object proxy, Method method, Object[] args)throws Throwable {System.out.println("预处理...权限校验");Object obj = method.invoke(subject, args);System.out.println("后处理...数据校验");return obj;}}

下面是如何调用:

public static void main(String[] args) {Subject subject = new RealSubject();InvocationHandler handler = new SubjectHandler(subject);ClassLoader cl = subject.getClass().getClassLoader();/** Returns an instance of a proxy class for the specified interfaces * that dispatches method invocations to the specified invocation handler.* 传入的是Subject接口的所有方法*/Subject proxy = (Subject) Proxy.newProxyInstance(cl, subject.getClass().getInterfaces(), handler);//调用其中一个方法,有传入参数和返回参数int[] array = {1,2,3};String a =proxy.request(array);System.out.println(a);//调用另外一个方法
        proxy.anotherRequest();/*** 用了代理和反射实现了上下文切入!* 不需要显式创建代理类即实现代理功能,而且不仅仅代理Subject,* 在handler中读取持久化数据即可实现动态代理,而且invoke上下处理,还可以实现动态切入的效果,这也是AOP编程概念*/}

输入如下

预处理...权限校验
real do something
1 2 3
后处理...数据校验预处理...权限校验
anotherRequest
后处理...数据校验

转载于:https://www.cnblogs.com/yanghuahui/p/3632636.html

反射和动态代理实现上下文切入AOP效果相关推荐

  1. Java提高班(六)反射和动态代理(JDK Proxy和Cglib)

    反射和动态代理放有一定的相关性,但单纯的说动态代理是由反射机制实现的,其实是不够全面不准确的,动态代理是一种功能行为,而它的实现方法有很多.要怎么理解以上这句话,请看下文. 一.反射 反射机制是 Ja ...

  2. 通过反射创建动态代理对象(三)

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 传入目标对象和Advice(要执行的内容)对"通过反射创建动态代理对象(二)"进行改造(AOP框 ...

  3. Android APP热更新中的插件化(Hook技术:反射或动态代理),Demo (2)

    修改AAPT,资源分区,用于Android插件化- https://github.com/BaoBaoJianqiang/AAPT -- Android下的挂钩(hook)和代码注入(inject) ...

  4. 十七、反射与动态代理

    文章目录 1.Java反射机制概述 1.1 使用反射,实现同上的操作 1.2 反射的强大:调用类的私有结构 2.理解Class类并获取Class实例 2.1 Class类的理解 2.2 获取Class ...

  5. 通过反射创建动态代理对象(二)

    2019独角兽企业重金招聘Python工程师标准>>> 一.概述 将"通过反射创建动态代理对象(一)"合二为一 二.代码说明 package staticimpo ...

  6. MyBatis源码解析【4】反射和动态代理

    通过之前的介绍,我们了解了几个组件的生命周期. 它也是我们重要装备之一. 今天我们需要搞一件更加强的装备,叫做反射和动态代理. 如果没有这件装备的话,显然后面的源码boss是打不动的. 顺便说一下,下 ...

  7. android hook底层代码_Java-Hook技术-入门实践(反射、动态代理)-Hook拦截通知(当前App/Context)...

    老样子,上一篇MonkeyLei:Java-Hook技术-入门实践+反射.动态代理.热修复再看看 我们Hook学习了一下,一个是Java本地Main的实践练习. 一个是Android的监听事件的Hoo ...

  8. java底层 —反射、动态代理

    java底层 -反射.动态代理和注解 1. 反射介绍 1.1 反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2 java的反射机制 java的反射机制是指在程序运行状态中,给 ...

  9. 死磕java底层(三)—反射、动态代理和注解

    1.反射介绍 1.1反射 反射是指程序可以访问,检测,修改它本身状态或行为的一种能力. 1.2java的反射机制 java的反射机制是指在程序运行状态中,给定任意一个类,都可以获取到这个类的属性和方法 ...

最新文章

  1. java触发_怎么样让JAVA 设置一秒钟触发一个事件
  2. 用Visio进行数据库建模、设计和实现
  3. ubuntu, debian 安装redis,设置开机自动启动和密码,允许外网访问
  4. 创业公司自曝「被谷歌封杀」,阻断一切访问,上诉只得到机器人回复
  5. setContentView是如何一步一步被显示出来的?
  6. js中Blob对象一般用法
  7. 【原创】分布式之redis复习精讲
  8. 怎么用python画饼状图_Python入门进阶:Python绘制饼图到Microsoft Excel
  9. 这5个bug我不信你没有写过
  10. TMDB电影数据分析报告
  11. 三款小工具:Resource Hacker、PE Explorer、SWF Converter
  12. 给程序员推荐的一款机械键盘
  13. 扇贝单词里有计算机英语吗,扇贝单词英语版
  14. 直流电机+L298N电机驱动模块
  15. 三栏式布局详解(代码+图解)
  16. c# 基于BouncyCastle.Crypto的国密sm2,sm4封装,与java版本兼容
  17. 软件腐化的七个特征之复杂性、重复性、晦涩性(设计模式原则的反面) (《敏捷软件开发》读书总结第三篇)
  18. Power BI 数据导入(SQL Server、MySQL、网页数据)
  19. 帽子,头巾游戏解析(微软百度笔试智力题)
  20. Linux学习笔记(三.文件内容命令其他命令)

热门文章

  1. 【展开讲讲?xmind日常小知识】xmind2020插入表格
  2. UNIX再学习 -- 记录锁
  3. 使用计算机来解决实际问题首先要完成,《操作系统》试题库-填空题
  4. Linux Container 研究报告
  5. 【译】zkSNARKs in a nutshell
  6. 【密码学】一万字带您走进密码学的世界(上)
  7. (原创)Android6.0亮屏流程之Keyguard Window绘制
  8. Framework中网络定位服务简介
  9. 使用Android Studio运行项目出现 UnsupportedMethodException 错误的解决办法
  10. Linux下Git和GitHub使用方法总结(Ubuntu16.04)