最后一个NPE

最后一个NPE

初探ThreadLocal

在使用spring boot的时候,发现这么样一个很有意思的功能: RequestContextHolder.getRequestAttributes()).getRequest() 可以通过这么样的一个类来获取当前的Request对象,第一反应就是spring boot替我们完成了requ...

2019-05-11 13:56:04

阅读数 13

评论数 0

谈谈传统BIO网络编程模型的局限性与NIO

先来看看我们的server端: 创建一个serversocket,进行监听,每来一个客户端,就启动一个新启动为其服务: private void createListenSocket() { //如果创建监听socket的时候发生异常,将会隔WAIT_TIME毫秒重试,直到成...

2019-04-25 12:28:52

阅读数 25

评论数 0

使用AOP来实现接口请求频率限制

老规矩,定义一个注解: /* * 被该注解修饰的方法都会被切面拦截进行请求次数限制 */ @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface Limit { int maxR...

2019-04-20 13:15:31

阅读数 114

评论数 0

使用AOP实现权限拦截校验

aop的好处就在于它可以只让你写一次代码,然后这些代码就可以用于容器当中的所有对象,权限拦截校验是一个表现形式。 那么,我们要如何实现这个功能? 首先,定义一个注解: /* * 被该注释修饰的方法都会经过切面拦截校验权限 */ @Retention(RetentionPolicy.RUNT...

2019-04-14 11:14:51

阅读数 54

评论数 0

无限树型菜单分类

有这么样一个需求:将以下二维记录转成一个树型菜单 很明显,结果将是森林。 那么这里提供一个通用算法,来实现菜单的转换。 首先,将所有记录读入: List<Department> departments = departmentMapper.selectAl...

2019-04-08 13:13:09

阅读数 44

评论数 0

个人对三层架构的看法

java web开发当中,有这么三层:controller、service、dao 分别为表现层、业务逻辑层以及数据访问层。 这样分层的好处有很多,出了问题易于调试,或者便于团队合作等等。 最重要的是,可以随时换掉其中的某一层而不影响其他层,这都是借鉴于早期的程序设计经验,计算机网络体系也是...

2019-04-02 14:21:47

阅读数 37

评论数 0

依赖注入项目总结

这个小demo代码量不算多,不过几百行。 但是写了两三天,其中不少地方删删改改,最后勉强实现了spring中的核心功能:依赖注入 我本身用过spring和guice这两种依赖注入框架,spring很强大,没错,但是spring一个让人诟病的地方就是繁杂的配置,几百行的配置文件都算是基础。 g...

2019-03-16 17:47:33

阅读数 23

评论数 0

java如何扫描本项目下的所有类

最近在写一个依赖注入的小demo,碰到这么样的一个问题: 要把本项目下所有被@Component修饰的所有类注入到容器当中。 思路很简单,通过文件枚举的方式扫描出本项目的所有类文件,再对文件名进行一些小处理,就能得到本项目的所有类。 public static void scanAllCl...

2019-01-28 18:04:12

阅读数 118

评论数 0

测试驱动开发初体验

测试驱动开发有下列三定律:     编写不能通过的单元测试前,不可以编写生产代码。     只可以编写刚好无法通过的单元测试,不能编译也算不通过。     只可以编写刚好足以通过当前失败测试的生产代码。 个人是不喜欢这些条条框框,这些东西看起来未免有一些教条主义。 概括一下上面三条原则:...

2019-01-14 17:42:01

阅读数 273

评论数 0

JAVA synchronized初体验

先来看看synchronized这个关键字是什么意思: 同步,同步什么? 要同步的就是这个关键字后面紧跟的花括号里的代码,也就是代码块。 为什么要同步? 来看一个例子: public static int i=0; public static void main(Strin...

2019-01-02 18:29:37

阅读数 23

评论数 0

对当前JAVA流行框架的一些小感悟

这几年,蹦出了不少各种JAVA框架,像是spring boot、spring cloud 和spring mvc或者是mybatis等等。 不断有人感慨,技术更新的太快,自己学都学不过来了。 但是,这些所谓的新框架,它们真的新吗? 拿这两年比较流行的spring boot来说,它根本就不能算...

2018-12-23 21:24:27

阅读数 78

评论数 0

开源一个命令行远控工具

整个项目都是使用java写的,包含server端、control端(被控端)以及master端(主控端)。 先来看看演示: 这个程序的结构就是允许多个客户端连接服务端,并且客户端之间可以通过服务端来进行通信,消息的交换格式我使用了json。 所以说,这个程序只是socket聊天的一个变体...

2018-12-22 14:56:17

阅读数 166

评论数 0

谈谈模板方法模式

老规矩,看看百科上是怎么描述模板方法模式的:模板方法模式定义了一个算法的步骤,并允许子类别为一个或多个步骤提供其实践方式。让子类别在不改变算法架构的情况下,重新定义算法中的某些步骤。 回到实际开发中,代码写多了,可能就会碰到这么样的一种情况,我们有两个算法,两个算法在整体上来看上差不多的,但是细...

2018-12-20 12:42:05

阅读数 22

评论数 0

记录一个spring boot 静态资源访问问题

spring boot 只要把静态资源放在static目录下,理论是可以直接访问的。 但是,今天却发现了一个很是头疼的问题,静态资源放入static文件夹了,但通过浏览器却是访问不到。 网上搜索了一大堆,都是一份文章你抄来,他抄去,一点价值都没有。 于是回到控制台,仔细查看spring bo...

2018-11-29 18:18:36

阅读数 34

评论数 0

说说JAVA当中的equals

equals这个属于Object类的方法,几乎每天都在用,可是看着它,却是既熟悉,又陌生。 先来看看Object中的equals中写了什么: public boolean equals(Object obj) { return (this == obj); } 恩...似乎...

2018-11-28 20:52:20

阅读数 49

评论数 0

一个关于JAVA GC的小实验

关于JAVA的GC,我只是略微了解,我知道如果一个对象没有其他东西引用它,它就会在适当的时机被回收掉。 但,如果一个A对象持有B对象的引用,后对A对象的引用被置为null,那么B对象还会被回收吗?如果B被回收,那么顺序是怎么样的?是A先,还是B先? 就让我们来实践一下: 创建两个类: p...

2018-11-22 17:51:27

阅读数 38

评论数 0

说说发布/订阅模式

说到观察者模式,就不得不谈谈发布订阅模式。 可以说发布订阅模式就是观察者模式的一种特殊情况。 回到上一篇文章的商城,假设又有一个新需求,有些合作商家只对特殊种类的商品进行推送,这,又该如何实现? 来一起完善下代码: 对Product类新增一个字段,该字段用来描述商品:   public ...

2018-11-14 17:23:12

阅读数 31

评论数 0

谈谈观察者模式

传说,好莱坞有一条规则:别来找我,我会去找你。 观察者模式,有两种角色:观察者,以及通知者(或者叫目标对象)。 当对象间存在一对多关系时,则使用观察者模式(Observer Pattern)。比如,当一个对象被修改时,则会自动通知它的依赖对象。观察者模式属于行为型模式。 单谈概念总是很虚,让我们来...

2018-11-12 21:27:57

阅读数 33

评论数 0

谈谈JAVA实现节假日验证

我们需要两个类,第一个类: 我们叫它验证类。 第二个类: 它是对法定节假日的抽象。 第一步开始:     当验证类被初始化的时候,会加载本年的所有法定节假日到一个list里: thisYearHolidays.add(new Holiday("元旦&...

2018-11-10 11:49:19

阅读数 433

评论数 0

对适配器模式的思考

适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。就像中美两国的插头标准是不一样的,可以用一个转接头来适配。 假设第三方库有这么样的一个类: class ThirdPartService{ public void run(){ ...

2018-11-06 10:29:09

阅读数 106

评论数 0

提示
确定要删除当前文章?
取消 删除
关闭
关闭