美文网首页
项目总结-代码

项目总结-代码

作者: 漫游指南 | 来源:发表于2018-04-26 17:24 被阅读0次

    1.一般情况,对于功能类似的类对象需要经过三层抽象,例如:

    (I)Handler(公有模块) -->  (A)AbstractHandler(公有实现) -->(C)xxxHandler(特定细节)。


    2.@SpringBootApplication(exclude={DataSourceAutoConfiguration.class}):

    当添加了数据库组件,autoconfig会去读取数据源配置,如果此时新建的项目还没有配置数据源,会导致异常出现。exclude={DataSourceAutoConfiguration.class}这部分作用为:暂时排除数据源配置文件地读取。


    3.单例模式应用你真的会写单例模式吗——Java实现 - ImportNew

    单例模式三种模式,饿汉、饱汉、双重锁模式,实例及优劣详解 - CSDN博客

    4、单例模式(静态代码块实现) - CSDN博客


    4.slf4j 日志库在spring-boot中配置: spring boot使用slf4j输出日志 - CSDN博客

    # 指定log4j2内部的日志输出级别,低于指定级别的日志将不会输出,ALL表示输出所有日志信息

    # 日志级别:ALL < TRACE < DEBUG < INFO < WARN < ERROR < FATAL < OFF


    5. fastjson 序列化时,自定义格式: 

    双重锁单例

    6.更改tomcat监听端口:在application.properties中添加server.port=10000 。

    查看串口占用程序:(win) netstat  -aon|findstr "10000" ,记下最后一位数字,即PID, 如2720;  tasklist|findstr "2720" ,查出占用程序。

    (Linux)1、lsof -i:端口号 ;2、netstat -tunlp|grep 端口号 都可以查看。


    7.Bean Validation :Java Bean Validation 2.0的方法约束 Java自定义验证注解-Leftso(左搜)

    简单讲是调用Validator.validate(R); 返回结果集Set<ConstraintViolation<R>>;遍历结果集确定校验结果。


    8.回调:Java回调机制解读 - 五月的仓颉 - 博客园

    java 回调机制原理及示例 - 可乐的世界 - ITeye博客

    Java回调方法详解 - byhieg - 博客园

    深入理解Java中的回调机制(最通俗易懂的回调机制的博客) - CSDN博客

    java回调函数的作用以及运用 - CSDN博客

    在下面的几种情况使用回调还是可以很容易发现回调的使用价值的:

    1、在必须给别的函数提供接口的时候

    2、在需要定时操作,或者条件操作的时候(上面的例子包含了这两种情况的用法)

    回调的核心就是回调方将本身即this传递给调用方(相当于留下联系方式), 其诀窍就在于定义一个简单的interface,申明一个被希望回调的方法。

    类A的a()方法调用类B的b()方法;类B的b()方法执行完毕主动调用类A的callback()方法,也就是一种双向的调用方式。

    举一例,为了使我们写的函数接近完美,就把一部分功能外包给别人,让别人个性化定制,至于别人怎么实现不管,我唯一要做的就是定义好相关接口,这一设计允许了底层代码调用高层定义的子程序,增强程序灵活性,和反射有着异曲同工之妙。

    关于回调及其机制 - CSDN博客 分开调用者与被调用者,常用于通知机制。


    9.java中只有值传递:你真的理解Java的按引用传递吗? - CSDN博客

    Java 到底是值传递还是引用传递? - 知乎

    深入理解Java引用类型 - (牛_牛).NET - 博客园

    引用的本质是什么? - Rollen Holt - 博客园

    Java中只有按值传递,没有按引用传递! - - ITeye博客


    10.异步处理:思路如下:

    1.定义一个处理任务的线程接口---task<D>;(对行为的抽象)

        定义处理函数接口。由实际调用者去实现这个接口。

    2.定义一个事件参数实体---Event<D>;(对属性的抽象)

        定义关键的几个属性,以及一个泛型数据。由实际调用者设置相应类型的数据。

    3.定义一个抽象事件管理主体--manager<D>;(对执行逻辑的抽象)

         定义一个阻塞队列,容纳所有需要处理的事件;(队列的“阻塞”性质有两个好处。首先,在添加元素时,如果队列容量有限,则内存消耗也是有限的。另外,如果队列消费者远远落后于生产者,则生产者自然会受到限制,因为他们必须等待添加元素。)需要暴露一个put方法,让实际调用者可以添加事件到该队列。

    定义一个线程池,在线程池里面处理所有实际事件请求;

    定义一个调度线程类,负责将队列里面的任务取出来,业务判断后加入线程池执行;

    定义执行事件的执行器,调用实际处理任务的线程(由1 中定义的);

    多模块使用时,需要定制化实现的是:

    1.定制化参数实体---D;

    2.定制化任务处理实体----Task;

    3.定制化的模块管理器---Manager;

    4.configuration -- 将定制化的Manager和Task 装载到Ioc容器。

    5.实际调用者执行插入queue的put方法。

    相关文章

      网友评论

          本文标题:项目总结-代码

          本文链接:https://www.haomeiwen.com/subject/aidllftx.html