`
wangxuliangboy
  • 浏览: 210705 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

spring动态代理封装MethodInvocation。导致获取不到方法annotation原因.

阅读更多

因为spring动态代理封装MethodInvocation。导致获取不到方法annotation原因.

 

spring如果需要前后通知的话。。一般会实现MethodInterceptor

 public Object invoke(MethodInvocation invocation) throws Throwable

 

invocation.getMethod().getAnnotations(); // 根本得不到原来类方法上的annotation

因为JDK在动态代理的时候。生成的代理类。。。方法签名跟类中的签名是一样的。但不是原来的方法

 

 

 

sun.misc.ProxyGenerator.ProxyGenerator.generateProxyClass生成的字节写到文件里去

 

 Class[] interfaces=new Class[]{ITest.class};
  byte[] proxyClassFile = ProxyGenerator.generateProxyClass(proxyName, interfaces);
  File file = new File("class/"+proxyName+".class");
   FileOutputStream fos = new FileOutputStream(file);
   fos.write(proxyClassFile);
   fos.flush();
   fos.close();

 

 

CGLIB生成代理类CLASS文件:

  Enhancer enhancer = new Enhancer();
        enhancer.setSuperclass(InfoManager.class);
        enhancer.setCallback(auth);
        InfoManager m = (InfoManager) enhancer.create();
        try {
            ClassWriter cw = new ClassWriter(true);
            enhancer.generateClass(cw);
            byte[] buffer = cw.toByteArray();
            FileOutputStream out = new FileOutputStream("c:/tttttt");
            out.write(buffer);
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

 

 

分享到:
评论

相关推荐

    类似spring Aop的Proxy封装

    有一天在用回调模版的时候,忽然间又想到jdk自带的Proxy类似乎不是怎么好用,为何不把其做成回调模版呢,可以将其改造称类似spring Aop 代码如下: package com.fjx.proxy.up.test; import ...

    spring aop 实现源代码--xml and annotation(带lib包)

    Spring在真正执行目标对象的方法前,会执行interceptorNames中执行的Advice,每个Advice在执行完自己的业务后,会调用MethodInvocation的proceed()方法,将执行的主动权移交给下一个Advice,直到没有下一个Advice...

    RMI代码 remote method invocation

    远程方法调用(Remote Method Invocation,RMI)是Java平台中一种用于分布式计算的技术,它允许Java对象在不同的 JVM(Java虚拟机)之间调用方法,仿佛这些对象都在同一个JVM中一样。RMI是Java EE(现在被称为...

    Spring代理模式解析

    Spring的代理模式使得我们可以方便地在不改变原始代码的情况下,对方法调用添加额外功能。通过动态代理,Spring AOP能够优雅地实现横切关注点,提高代码的可维护性和灵活性。在实际开发中,熟练掌握Spring代理模式...

    解决axis2-CodegenWizardPluginBUG- java.lang.reflect.InvocationTargetException

    `InvocationTargetException`通常作为Java标准库中的`java.lang.reflect.Method.invoke()`方法的异常包装器。当目标方法抛出异常时,`invoke()`会捕获这个异常并封装为`InvocationTargetException`,然后将其抛出。...

    Remote Method Invocation-远程方法调用

    ### Remote Method Invocation (RMI) – 远程方法调用详解 #### 一、RMI 概述 **远程方法调用**(Remote Method Invocation, RMI)是Java平台中的一个核心概念和技术,它允许开发者创建分布式应用,在这些应用中,...

    Spring Aop Advise方法(增强方法) 中获取目标方法的参数

    在Spring AOP(面向切面编程)中,Advise(增强方法)是核心概念之一,它允许我们在不修改原有业务代码的情况下,通过拦截器模式来插入额外的功能或行为。这篇博客文章“Spring Aop Advise方法(增强方法) 中获取目标...

    JDK9-JSE- Java Remote Method Invocation API Guide-2.pdf

    Java Remote Method Invocation API Guide Java Remote Method Invocation(Java RMI)是一种允许开发者创建分布式应用程序的技术。Java RMI 允许对象在另一个 Java 虚拟机(JVM)上调用远程 Java 对象的方法,可能...

    Java反射与动态代理

    3. **远程调用**:如RMI(Remote Method Invocation),代理对象可以封装网络通信细节。 结合反射和动态代理,开发者可以构建更加灵活和强大的应用程序,实现高度抽象和解耦。但需要注意的是,过度使用反射和动态...

    JDK10-JSE,Java Remote Method Invocation API Guide-2.pdf

    Java Remote Method Invocation API Guide Java Remote Method Invocation(Java RMI)是一种允许分布式应用程序在Java平台上运行的技术。它允许在不同的Java虚拟机(JVM)上运行的对象之间调用方法,从而实现...

    从JDK动态代理看Spring之AOP实现

    本文将深入探讨Spring是如何通过JDK的动态代理来实现AOP的。 首先,我们要理解JDK动态代理的基本原理。在Java中,动态代理主要由`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口组成。...

    Spring源码学习十二:@Transactional是如何工作的1

    如果获取不到拦截器,则不会创建 MethodInvocation,直接调用目标方法。这 里使用 TransactionInterceptor 创建一个 ReflectiveMethodInvocation 实例,调用的时候进入 ReflectiveMethodInvocation。 @...

    动态代理与RMI远程调用

    动态代理和RMI(Remote Method Invocation)是Java中两种重要的分布式计算技术,它们在实际的软件开发中扮演着至关重要的角色。本篇将详细介绍这两个概念,以及如何通过源码和PPT来理解它们。 首先,让我们来理解...

    SpringSecurity 3.0.1.RELEASE.CHM

    14.1. AOP联盟 (MethodInvocation) 安全拦截器 14.1.1. 精确的 MethodSecurityIterceptor 配置 14.2. AspectJ (JoinPoint) 安全拦截器 15. 基于表达式的权限控制 15.1. 概述 15.1.1. 常用内建表达式 15.2. Web...

    Spring使用AOP的三个jar包

    1.0.0.jar`是AOP联盟提供的一个接口库,它定义了一些通用的AOP接口,比如`org.aopalliance.intercept.MethodInterceptor`和`org.aopalliance.intercept.MethodInvocation`,使得不同的AOP框架(如Spring和AspectJ)...

    java Proxy 动态代理

    - 远程调用:在RMI(Remote Method Invocation)中,可以通过动态代理将远程方法调用包装成本地方法调用。 - 插件系统:插件可以通过动态代理实现与主程序的交互,而无需了解主程序的具体实现。 5. **源码分析**...

    远程对象方法调用(动态代理+socket).rar

    远程对象方法调用(Remote Method Invocation,简称RMI)是Java平台中用于分布式计算的一种机制,它允许在不同网络节点上的对象之间进行方法调用,仿佛这些对象都在同一个进程中一样。RMI结合了动态代理和Socket通信...

Global site tag (gtag.js) - Google Analytics