QException是项目业务异常基类 按模块划分子类异常,方便定位那块出错 有个来源码属性code作用定位某个功能处理出错逻辑,数字类型节省内存空间,同时减少创建子类的子类 QSocketException 是通信层出错 凡是来自QSocketException 统一认为非法请求,强制关闭socket连接 QJsonException 是json编解码出错 json很流行种数据格式,跨平台特点,经常处理 QEnhanceException 是Javassist动态生成java class技术,…
Java异常体系结构 Thorwable类所有异常和错误的超类,有两个子类Error和Exception,分别表示错误和异常. 其中异常类Exception又分为运行时异常(RuntimeException)和编译时异常(checked Exception), 下面将详细讲述这些异常之间的区别与联系: 1.Error与Exception Error是程序无法处理的错误,比如OutOfMemoryError.ThreadDeath等.这些异常发生时, Java虚拟机(JVM)一般会选择线程终止.…
基础部份: 接下来讲编译JAVA时,生成自定义class 我们用 javax.annotation.processing.AbstractProcessor 来处理 public abstract class AbstractProcessor implements Processor { protected ProcessingEnvironment processingEnv; public Set<String> getSupportedOptions() { SupportedOpti…
应用动态代理技术要先掌握annotation技术 注解是JDK1.5之后才有的新特性,JDK1.5之后内部提供的三个注解 @Deprecated 意思是“废弃的,过时的” @Override 意思是“重写.覆盖” @SuppressWarnings 意思是“压缩警告” 注解可以加在类名,方法,参数,属性等,为开发者自定义编译处理,JPA是基于注解的,Spring2.5以上都是基于注解的,Hibernate3.x以后也是基于注解 所以注解是做框架必备技术 先来看看如何书写Annotation im…
动态代理这篇比较长,是框架组成的重要基础 回顾下学到的应用技术 1.异常应用 2.annotation技术 3.数值与逻辑分享 4.jdk.cglib.javassist等动态代理技术 5.懒处理.预处理.编译处理 6.rpc设计,与实现 7.扫描class 8.系统服务水平扩展支持…
为什么要分离? 业务需求是不停地变,如果把条件写进代码里,当用户需求变时要改代码发版本更新才能生效,这过程无疑是漫长的 就算是在开发期,不停的变开发者精力耗光在沟通,小修改上,无法专注逻辑部分 分离的根本目的是让开发者专注写引擎部分,无需关注太多业务上的边界,条件等 需要分离什么类型数值? 如活动开启时间,购买满足条件,购买上限等 这些不确定用户具体需求,全都可以弄成动态获取 分离技术实现有很多 如使用数据库mysql等 linux 常用的配置文本config 表格csv,json文件等 本项目…
基础部份: 接下来讲编译JAVA时,生成自定义class 我们用 javax.annotation.processing.AbstractProcessor 来处理 public abstract class AbstractProcessor implements Processor { protected ProcessingEnvironment processingEnv; public Set<String> getSupportedOptions() { SupportedOpti…
需要用到的工具  jdk : javac javap class 反编译 :JD-GUI http://jd.benow.ca/ import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; public class TestJdkProxy { public interface UserService { public String get…
接下来如何实现 第一步:先把服务类,调用方法转换成数字,方便传输 第二步:提取元信息,提取又有三种方式,三种各有优点,最优方式是第一种 1.编译java时处理 2.程序启动时处理,预处理 3.调用时处理,懒处理 第三步:编码解释 第四步:请求方式 第五步:分布式支持 第一步: @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) public @interface QModel { short value(); } @Targ…
基础部份: 修改class我们用到javassist,在pom.xml添加 <properties> <javassist.version>3.18.2-GA</javassist.version> </properties> <dependency> <groupId>org.javassist</groupId> <artifactId>javassist</artifactId> <ve…