package com.luo.dubbo.util;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.net.URL;
import java.net.URLDecoder;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Set;
public class ReflectUtils {
/**
* void(V).
*/
public static final char JVM_VOID = 'V';
/**
* boolean(Z).
*/
public static final char JVM_BOOLEAN = 'Z';
/**
* byte(B).
*/
public static final char JVM_BYTE = 'B';
/**
* char(C).
*/
public static final char JVM_CHAR = 'C';
/**
* double(D).
*/
public static final char JVM_DOUBLE = 'D';
/**
* float(F).
*/
public static final char JVM_FLOAT = 'F';
/**
* int(I).
*/
public static final char JVM_INT = 'I';
/**
* long(J).
*/
public static final char JVM_LONG = 'J';
/**
* short(S).
*/
public static final char JVM_SHORT = 'S';
public static String getName(Class<?> c) {
if (c.isArray()) {
StringBuilder sb = new StringBuilder();
do {
sb.append("[]");
c = c.getComponentType();
} while (c.isArray());
return c.getName() + sb.toString();
}
return c.getName();
}
public static String getDescWithoutMethodName(Method m) {
StringBuilder ret = new StringBuilder();
ret.append('(');
Class<?>[] parameterTypes = m.getParameterTypes();
for (int i = 0; i < parameterTypes.length; i++)
ret.append(getDesc(parameterTypes[i]));
ret.append(')').append(getDesc(m.getReturnType()));
return ret.toString();
}
public static String getDesc(Class<?> c) {
StringBuilder ret = new StringBuilder();
while (c.isArray()) {
ret.append('[');
c = c.getComponentType();
}
if (c.isPrimitive()) {
String t = c.getName();
if ("void".equals(t))
ret.append(JVM_VOID);
else if ("boolean".equals(t))
ret.append(JVM_BOOLEAN);
else if ("byte".equals(t))
ret.append(JVM_BYTE);
else if ("char".equals(t))
ret.append(JVM_CHAR);
else if ("double".equals(t))
ret.append(JVM_DOUBLE);
else if ("float".equals(t))
ret.append(JVM_FLOAT);
else if ("int".equals(t))
ret.append(JVM_INT);
else if ("long".equals(t))
ret.append(JVM_LONG);
else if ("short".equals(t))
ret.append(JVM_SHORT);
} else {
ret.append('L');
ret.append(c.getName().replace('.', '/'));
ret.append(';');
}
return ret.toString();
}
public static String getDesc(final Constructor<?> c) {
StringBuilder ret = new StringBuilder("(");
Class<?>[] parameterTypes = c.getParameterTypes();
for (int i = 0; i < parameterTypes.length; i++)
ret.append(getDesc(parameterTypes[i]));
ret.append(')').append('V');
return ret.toString();
}
/***
* 获取 非静态,公有方法
*
* @param clazz
* @return
* @author HadLuo 2017年11月20日 新建
*/
public static List<Method> getPublicMethod(Class<?> clazz) {
List<Method> ms = new ArrayList<Method>();
for (Method m : clazz.getMethods()) {
if (!Modifier.isStatic(m.getModifiers()) && Modifier.isPublic(m.getModifiers())) {
ms.add(m);
}
}
return ms;
}
/***
* 执行方法
*
* @param target
* @param method
* @param args
* @author HadLuo 2017年10月25日 新建
*/
public static Object invoke(Object target, Method method, Object... args) {
try {
return method.invoke(target, args);
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalArgumentException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/***
* 判断 a是否是 b的 子类
*
* @param a
* @param b
* @return
* @author HadLuo 2017年10月24日 新建
*/
public static boolean isChild(Class<?> a, Class<?> b) {
return b.isAssignableFrom(a);
}
/***
* 获取 此类,及其超类的 所有字段
*
* @return
* @author HadLuo 2017年10月25日 新建
*/
public static List<Field> getAllFields(Class<?> clazz) {
List<Field> fieldList = new ArrayList<Field>();
while (clazz != null) {// 当父类为null的时候说明到达了最上层的父类(Object类).
fieldList.addAll(Arrays.asList(clazz.getDeclaredFields()));
clazz = clazz.getSuperclass(); // 得到父类,然后赋给自己
}
return fieldList;
}
/***
* 获取 此类,及其超类的 所有字段
*
* @return
* @author HadLuo 2017年10月25日 新建
*/
public static List<Field> getAllFieldsByAnnotation(Class<?> clazz,
Class<? extends Annotation> annotationClass) {
List<Field> fieldList = new ArrayList<Field>();
while (clazz != null) {// 当父类为null的时候说明到达了最上层的父类(Object类).
for (Field f : clazz.getDeclaredFields()) {
if (f.isAnnotationPresent(annotationClass)) {
fieldList.add(f);
}
}
clazz = clazz.getSuperclass(); // 得到父类,然后赋给自己
}
return fieldList;
}
/***
* 获取 此类及其超类 有 对应注解 的字段
*
* @return
* @author HadLuo 2017年10月25日 新建
*/
public static Annotation getFieldAnnotation(Class<?> clazz, Class<? extends Annotation> annotationClass) {
while (clazz != null) {// 当父类为null的时候说明到达了最上层的父类(Object类).
for (Field f : clazz.getDeclaredFields()) {
if (f.isAnnotationPresent(annotationClass)) {
return f.getAnnotation(annotationClass);
}
}
clazz = clazz.getSuperclass(); // 得到父类,然后赋给自己
}
return null;
}
/***
* 获取 此类,及其超类的 所有方法
*
* @return
* @author HadLuo 2017年10月25日 新建
*/
public static Method getMethod(Class<?> clazz, String name, Class<?>... parameterTypes) {
Method m = null;
while (clazz != null) {// 当父类为null的时候说明到达了最上层的父类(Object类).
try {
m = clazz.getDeclaredMethod(name, parameterTypes);
} catch (Exception e) {
// TODO
e.printStackTrace();
throw new RuntimeException(e);
}
if (m != null) {
break;
}
clazz = clazz.getSuperclass(); // 得到父类,然后赋给自己
}
没有合适的资源?快使用搜索试试~ 我知道了~
自己手动实现dubbo源码
共259个文件
class:116个
java:97个
xml:16个
需积分: 9 18 下载量 110 浏览量
2017-12-21
14:45:57
上传
评论
收藏 218KB RAR 举报
温馨提示
里面有三个mavaen工程具体看博客介绍.................................
资源推荐
资源详情
资源评论
收起资源包目录
自己手动实现dubbo源码 (259个子文件)
error.log ## å¼å¸¸æ¥å¿æ件å.2017-11-17 203KB
ClassGenerator.class 13KB
ReflectUtils.class 13KB
NettyRpc.class 6KB
UnSafe.class 5KB
ConsumerHandler.class 5KB
ProviderHandler.class 5KB
NettyClient.class 5KB
ZKRegistry.class 4KB
BeanParser.class 4KB
DefaultResultSet.class 4KB
AbstractDubboContext.class 4KB
NettyServer.class 4KB
Node.class 4KB
ObjectUtils.class 4KB
SpringContext.class 4KB
HessianUtils.class 3KB
ProxyFactory.class 3KB
ComplexConnector.class 3KB
DubboContext.class 3KB
NettyServer$1.class 2KB
ContextFactory.class 2KB
NettyClient$HeartBeatClientHandler.class 2KB
NettyRpc$3.class 2KB
StaticResource.class 2KB
UnSafe$1.class 2KB
NettyClient$1.class 2KB
NettyRpc$2.class 2KB
NettyRpc$1.class 2KB
ApplicationBean.class 2KB
UUIDUtils.class 2KB
NettyBootstrap.class 2KB
ProviderHandler$1$1.class 2KB
ConnectorIdleStateTrigger.class 2KB
PatternUtils.class 2KB
TcpPackage.class 2KB
ZKRegistry$1.class 2KB
RpcClass.class 2KB
SoftReferenceCache.class 2KB
RegistryConnector.class 2KB
NettyServer$ServerHandler.class 2KB
ServiceBean.class 2KB
ProxyPool.class 2KB
ProviderHandler$1.class 2KB
PackageBuilder.class 2KB
NetworkUtils.class 2KB
RegistryFactory.class 1KB
DubboBeanFactory.class 1KB
RpcMethod.class 1KB
TestController.class 1KB
ReferenceBeanProxy.class 1KB
AbstractRegistry.class 1KB
NettyServer$2.class 1KB
Socket.class 1KB
Entry.class 1KB
DubboContext$1.class 1KB
AbstractBeanParser.class 1KB
Server.class 1KB
Assert.class 1KB
Bundle.class 1KB
ResourceUtils.class 1KB
ContextFactory$ContextEnum.class 1KB
RegistryBean.class 1KB
AcceptorIdleStateTrigger.class 1KB
Main.class 1KB
FileSystemXmlAppSpringContext.class 1KB
WebAppSpringContext.class 1KB
ExceptionPackage.class 1KB
User.class 1KB
DefaultStrategy.class 1KB
ArrayUtils.class 1KB
UserServiceImpl.class 1KB
SpringUtils.class 1KB
JsonUtils.class 1KB
ReferenceBean.class 1KB
Main.class 994B
ProtocolBean.class 979B
DubboNameSpaceHandler.class 942B
ChangeStatusStrategy.class 928B
ReflectUtils$1.class 896B
ConsumerHandler$1.class 838B
Log.class 836B
Node$PathInfo.class 814B
DefaultStrategy.class 789B
Package.class 767B
Registry.class 766B
ThreadUtils.class 746B
DefaultResultSet$1.class 740B
ConsumerNode.class 728B
ProviderNode.class 728B
Context.class 673B
NotInstanceRegistryException.class 602B
Rpc.class 598B
DubboConfigFileNotFound.class 587B
Handler.class 584B
ConnectionException.class 575B
NodeValueException.class 572B
RpcInvokeException.class 572B
Start.class 481B
Inject.class 472B
共 259 条
- 1
- 2
- 3
资源评论
罗政
- 粉丝: 183
- 资源: 11
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功