dubbo学习笔记 八 dubbo-common
来源:互联网 发布:网络机柜理线路图 编辑:程序博客网 时间:2024/06/07 03:25
前面学习了config container registry,为了后面的学习,今天开始学习下dubbo-common
beanutil
这里面对class的一些定义和对反射的封装
public enum JavaBeanAccessor { /** Field accessor. */ FIELD, /** Method accessor.*/ METHOD, /** Method prefer to field. */ ALL; public static boolean isAccessByMethod(JavaBeanAccessor accessor) { return METHOD.equals(accessor) || ALL.equals(accessor); } public static boolean isAccessByField(JavaBeanAccessor accessor) { return FIELD.equals(accessor) || ALL.equals(accessor); }}
bytecode
核心是proxy和wrapper 动态操作源代码 proxy 主要是javassist 的实现
wrapper 主要是invokeMethod
public Object invokeMethod(Object o, String n, Class[] p, Object[] v)throws java.lang.reflect.InvocationTargetException {com.alibaba.dubbo.demo.DemoService w;try {w = ((com.alibaba.dubbo.demo.DemoService) $1);} catch (Throwable e) {throw new IllegalArgumentException(e);}try {if ("sayHello".equals($2) && $3.length == 1) {return ($w) w.sayHello((java.lang.String) $4[0]);}} catch (Throwable e) {throw new java.lang.reflect.InvocationTargetException(e);}throw new com.alibaba.dubbo.common.bytecode.NoSuchMethodException("Not found method \"" + $2 + "\" in class com.alibaba.dubbo.demo.DemoService.");}
compiler
重点是实现编译,从源代码到 Class ,javacompiler和javassist
@SPI("javassist")public interface Compiler {/** * Compile java source code. * * @param code Java source code * @param classLoader TODO * @return Compiled class */Class<?> compile(String code, ClassLoader classLoader);}
extension
这个包下面的东西是核心,如果通过配置扩展和动态加载实现类,就靠它来是实现,因为内容较多,单开一节
ExtensionLoader
public static <T> ExtensionLoader<T> getExtensionLoader(Class<T> type) { if (type == null) throw new IllegalArgumentException("Extension type == null"); if(!type.isInterface()) { throw new IllegalArgumentException("Extension type(" + type + ") is not interface!"); } if(!withExtensionAnnotation(type)) { throw new IllegalArgumentException("Extension type(" + type + ") is not extension, because WITHOUT @" + SPI.class.getSimpleName() + " Annotation!"); } ExtensionLoader<T> loader = (ExtensionLoader<T>) EXTENSION_LOADERS.get(type); if (loader == null) { EXTENSION_LOADERS.putIfAbsent(type, new ExtensionLoader<T>(type)); loader = (ExtensionLoader<T>) EXTENSION_LOADERS.get(type); } return loader; }
io
一些btye操作,和reader writer
json
一些对json的封装
logger
内部logger的封装,对其他日志框架留有适配
serialize
dubbo/hessian/java/json/nativejava 各种序列化框架的实现,主要就是 io流和对象的相互转化
public interface Serialization { /** * get content type id * * @return content type id */ byte getContentTypeId(); /** * get content type * * @return content type */ String getContentType(); /** * create serializer * @param url * @param output * @return serializer * @throws IOException */ @Adaptive ObjectOutput serialize(URL url, OutputStream output) throws IOException; /** * create deserializer * @param url * @param input * @return deserializer * @throws IOException */ @Adaptive ObjectInput deserialize(URL url, InputStream input) throws IOException;}
status
dubbo 内部运行状态的定义
public class Status { /** * Level */ public static enum Level { /** * OK */ OK, /** * WARN */ WARN, /** * ERROR */ ERROR, /** * UNKNOWN */ UNKNOWN }
store
简单的map存储类,提供统一的工具类
@SPI("simple")public interface DataStore { /** * return a snapshot value of componentName */ Map<String,Object> get(String componentName); Object get(String componentName, String key); void put(String componentName, String key, Object value); void remove(String componentName, String key);}
threadpool
对java的线程池做了一层封装,提供出工具类来
@SPI("fixed")public interface ThreadPool { /** * 线程池 * * @param url 线程参数 * @return 线程池 */ @Adaptive({Constants.THREADPOOL_KEY}) Executor getExecutor(URL url);}
util
提供一些工具类
URL
registry://192.168.1.7:9090/com.alibaba.service1?param1=value1&param2=value2
URL 本来是用来远程寻址的,dubbo 用它来暴露服务
injvm://127.0.0.1/com.alibaba.dubbo.demo.DemoService?anyhost=true&application=demo-provider&dubbo=2.0.0&generic=false&interface=com.alibaba.dubbo.demo.DemoService&loadbalance=roundrobin&methods=sayHello&owner=william&pid=91627&side=provider×tamp=1482029844843
public final class URL implements Serializable { private static final long serialVersionUID = -1985165475234910535L; private final String protocol;private final String username;private final String password;private final String host;private final int port;private final String path; private final Map<String, String> parameters;
0 0
- dubbo学习笔记 八 dubbo-common
- dubbo学习笔记 九 dubbo-common之动态扩展extension
- dubbo学习笔记
- 阿里Dubbo学习笔记
- dubbo-学习笔记
- dubbo入门学习笔记
- dubbo学习笔记
- dubbo 学习笔记
- dubbo学习笔记
- dubbo学习概要笔记
- Dubbo入门学习笔记
- Dubbo 学习笔记
- DUBBO学习笔记
- dubbo 学习笔记
- dubbo学习笔记
- Dubbo框架学习笔记
- Dubbo的学习笔记
- dubbo学习笔记
- Cocos2dx报错undefined reference to 'cocos2d::Sprite::setDisplayFrameWithAnimationName(std::__1::basic
- 专题1:裸机开发快速体验+交叉工具链
- 静态类加载过程、对象的创建过程
- swift语言的学习笔记二(可选类型?和隐式可选类型!)
- linux 下sqlite的 C编程之sqlite3_get_table
- dubbo学习笔记 八 dubbo-common
- pig-0.11.1安装安装部署
- swoole深入学习 1. swoole初始
- 1015. 德才论 (25)
- Android 数据存储ContentProvider(类容提供者)之对外提供数据修改
- 基于opencv视频中运动目标标定
- dubbo学习笔记 九 dubbo-common之动态扩展extension
- swift语言的学习笔记三(闭包-匿名函数)
- 基于Python的Selenium自动化— 实现验证码截取并识别