java rmi stub 反编译以后, 动态代理

源文件:

/**

*

* User: xingxiaobing

* Date: 2015-02-13

* 远程的接口的实现

*/

public class HelloImpl extends UnicastRemoteObject implements IHello {

/**

* 因为UnicastRemoteObject的构造方法抛出了RemoteException异常,因此这里默认的构造方法必须写,必须声明抛出RemoteException异常

*

* @throws RemoteException

*/

public HelloImpl() throws RemoteException {

}

/**

* 简单的返回“Hello World!"字样

*

* @return 返回“Hello World!"字样

* @throws java.rmi.RemoteException

*/

public String helloWorld() throws RemoteException {

return "Hello World!";

}

/**

* 一个简单的业务方法,根据传入的人名返回相应的问候语

*

* @param someBodyName 人名

* @return 返回相应的问候语

* @throws java.rmi.RemoteException

*/

public String sayHelloToSomeBody(String someBodyName) throws RemoteException {

return "你好," + someBodyName + "!";

}

}

在工程bin目录下使用 rmic 命令

反编译以后

package rmi;

import java.lang.reflect.Method;

import java.rmi.Remote;

import java.rmi.RemoteException;

import java.rmi.UnexpectedException;

import java.rmi.server.RemoteObject;

import java.rmi.server.RemoteRef;

import java.rmi.server.RemoteStub;

//实现和真实对象相同的接口

// RemoteStub 类是客户机 stub 的公共超类,提供支持大量远程引用语义的框架

public final class HelloImpl_Stub extends RemoteStub

implements IHello, Remote

{

private static final long serialVersionUID = 2L;

private static Method $method_helloWorld_0;

private static Method $method_sayHelloToSomeBody_1;

static

{

try

{

$method_helloWorld_0 = Remote.class.getMethod("helloWorld", new Class[0]);

$method_sayHelloToSomeBody_1 = tmp50_47.getMethod("sayHelloToSomeBody", new Class[] { String.class });

}

catch (NoSuchMethodException localNoSuchMethodException)

{

throw new NoSuchMethodError("stub class initialization failed");

}

}

public HelloImpl_Stub(RemoteRef paramRemoteRef)

{

super(paramRemoteRef);

}

public String helloWorld()

throws RemoteException

{

Object localObject;

try

{

//调用真实对象的helloword方法

localObject = this.ref.invoke(this, $method_helloWorld_0, null, 32013462L);

return ((String)localObject);

}

catch (RuntimeException localRuntimeException)

{

throw localRuntimeException;

}

catch (RemoteException localRemoteException)

{

throw localRemoteException;

}

catch (Exception localException)

{

throw new UnexpectedException("undeclared checked exception", localException);

}

}

public String sayHelloToSomeBody(String paramString)

throws RemoteException

{

try

{

Object localObject = this.ref.invoke(this, $method_sayHelloToSomeBody_1, new Object[] { paramString }, -1641805534L);

return ((String)localObject);

}

catch (RuntimeException localRuntimeException)

{

throw localRuntimeException;

}

catch (RemoteException localRemoteException)

{

throw localRemoteException;

}

catch (Exception localException)

{

throw new UnexpectedException("undeclared checked exception", localException);

}

}

}

显然 HelloImpl_Stub  是 HelloImpl 的一个代理。

动态生成HelloImpl_Stub 的过程, 就是动态创建代理的过程。

时间: 2024-07-31 00:38:05

java rmi stub 反编译以后, 动态代理的相关文章

java 反射提取类信息, 动态代理 和过滤某些方法演示

package org.rui.classts.reflects; import java.lang.reflect.Constructor; import java.lang.reflect.Method; import java.util.regex.Pattern; /** * 提取 类的 方法 构造器 * @author lenovo * */ //{args:ShowMethods} //查看一个类的所有方法和构造器 public class ShowMethods { private

CFR - another java decompiler批量反编译jar文件(转)

CFR - another java decompiler批量反编译jar文件 jd-gui众所周知,业界公认的反编译必备工具. 笔者目前遇到一个java项目,社区版,想做一个本地化的版本,询问官方,官方说闭源,无奈之下只能反编译了. 面对那么多jar,jd-gui一个个去反编译保存,工作量的确很大.幸好在网上找到一个不错的工具 高能预警:jd-gui反编译的错误的,你敢不敢放到cfr来反编译试一试,保证有惊喜. CFR - another java decompiler 特性: CFR wil

Java反射—运用反射生成jdk动态代理

1.  核心类&接口 在Java的java.lang.reflect包下提供一个Proxy类和一个InvocationHandler接口,通过使用这个类和接口可以生成jdk动态代理类或动态代理对象. Proxy是所有动态代理类的父类,它提供了两个静态方法来创建动态代理类和动态代理对象,如下: ?  static Class<?> getProxyClass(ClassLoader loader, Class<?>... interfaces) ?  static Objec

java反射机制(4)动态代理初探

动态代理是javase中重要的一环,比如说spring框架的aop基本上都是用动态代理实现的. 动态代理也能帮助程序员减少工作量,减少代码的冗余. 但是java本身的动态代理必须是实现了接口的类才能运用代理,这是一个缺点. 接口: public interface HireHouse { public void hire(); } 接口实现类: public class HireHouseImpl implements HireHouse { @Override public void hire

Java反射学习总结四(动态代理使用实例和内部原理解析)

通过上一篇文章介绍的静态代理Java反射学习总结三(静态代理)中,大家可以发现在静态代理中每一个代理类只能为一个接口服务,这样一来必然会产生过多的代理,而且对于每个实例,如果需要添加不同代理就要去添加相应的代理类.解决这一问题最好的做法是可以通过一个代理类完成全部的代理功能或者说去动态的生成这个代理类,那么此时就必须使用动态代理完成. 动态代理知识点: Java动态代理类位于java.lang.reflect包下,主要有以下一个接口和一个类: 1.InvocationHandler接口:    

Java进阶学习第24天——动态代理与类加载器

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.06.17 lutianfei none 动态代理 代理对象存在的价值:主要用于拦截对真实业务对象的访问. 代理对象有什么方法? 现在要生成某一个对象的代理对象,这个代理对象通常也要编写一个类来生成,所以首先要编写用于生成代理对象的类. 如何编写生成代理对象的类,两个要素: 代理谁 如何生成代理对象 代理谁? 设计一个类变量,以及一个构造函数,记住代理类 代理哪个对象. 如何生成代理对象? 设计一个方法生成代理对象(在

Java 基础 - javap 反编译命令

总结 javap是jdk自带的反解析工具.它的作用就是根据class字节码文件,反解析出当前类对应的code区(汇编指令).本地变量表.异常表和代码行偏移量映射表.常量池等等信息. javap的用法格式: javap <options> <classes> 其中classes就是你要反编译的class文件. 在命令行中直接输入javap或javap -help可以看到javap的options有如下选项: -help --help -? 输出此用法消息 -version 版本信息,

教你快速高效接入SDK——打包工具的实现(反编译资源动态整合打渠道包)

整套u8sdk的核心思想,就是让我们的SDK接入成本,能够控制在1,而不是N.啥意思呢?就是,我开发第一款游戏的时候,我接了这些SDK,当我开发第二款,第三款游戏的时候,这套SDK可以尽可能的复用,而不是每开发一款游戏,又从头去接各个渠道sdk.所有的游戏都能够使用同一套SDK接入框架,来快速完成SDK的接入工作.那么,在U8SDK里,我们怎么做到呢?请看我们总体的思路: 游戏A,游戏B,游戏C是三款不同的游戏,对于他们来说,他们只需要调用U8SDK抽象层提供的接口,就完成了所有SDK的接入工作

java动态代理

要想了解Java动态代理,首先要了解什么叫做代理,熟悉设计模式的朋友一定知道在Gof总结的23种设计模式中,有一种叫做代理(Proxy)的对象结构型模式,动态代理中的代理,指的就是这种设计模式. 在我看来所谓的代理模式,和23种设计模式中的"装饰模式"是一个东西.23种设计模式中将它们作为两种模式,网上也有些文章讲这两种模式的异同,从细节来看,确实可以人为地区分这两种模式,但是抽象到一定高度后,我认为这两种模式是完全一样的.因此学会了代理模式,也就同时掌握了装饰模式. 代理模式 代理模