设计模式-观察者模式 使用Observer和Observable组合实现观察者 1public class DataCenter extends Observable { 2 3 private String data = "Initial DataCenter"; 4 5 public void change() { 6 data = "DataCenter has changed"; 7 } 8 9 public void changeSomething() { 10 change(); 11 setChanged(); // 需要首先改变自身的状态,才能提醒观察者自己的状态已经改变了 12 notifyObservers(); …
阅读更多目录 [toc] Spring的Bean管理 本博客基于SpringSourceCodeTest仓库中【SpringDemo1.0】tag进行的编写。 基于配置文件进行bean管理的方案是Spring初期推行的方式,在历史比较悠久的Spring项目中比较常见。 基于扫描的方式装载bean 一个比较典型的配置文件通常包含<context>标签, <context>用来表示该项目中哪些包中的bean需要被进行生命周期管理。 默认情况下,使用<context>后,Spring会默认扫描定义的带有如下注解的bean: @Component @Repository @Service @Controller @RestController …
阅读更多目录 [toc] 一点点手写Spring 一直有一个小小的计划,做一个完整的系列,从使用Spring,到模拟Spring,到“抄袭”Spring,一点点理解Spring的内在和机制,同时加深自己对Java机制以及设计模式等内在的理解。 因为Spring很大,模块很多,这里我计划只关注Spring的core包、bean包和context包,分别对应核心、bean的生命周期管理和Spring上下文的。 首先从Spring的基础配置开始,我们现在最经常使用Spring的Bean管理有两种方式:①通过配置文件管理bean; ②通过注解配置类进行bean的扫描管理。 我将尝试两种扫描方式都用一次,然后尝试各自复现。基于此来对Spring 使 …
阅读更多[toc] 注解背景 首先我们要知道背景知识: 每一个注解其实就是一个特殊的接口(带着@符号,其实是语法糖,会被编译器自动编译成继承自Annotation接口)。我们反编译一下class文件就能看出来。 注解只是一个标记位,标记了某一个类,某一个字段或者某一个函数之后,我们就可以对被标记的属性进行我们期望的行为——比如运行时动态获取和修改被标记的属性,动态执行被标记的函数等等 基于第二点,我们在定义了自己的注解之后,还要定义自己注解的解析类,这样我们才能真正让注解发挥起作用(只标记而不做任何动作就和没标记没任何区别了) 源码解析 废话不说上我自己定义的代码,然后一个一个说明。 1package …
阅读更多目录 [toc] Lambda表达式Java函数式接口 都9012年了,这篇博文代码看看5000年前4012年发布的Java 8新引入的Lambda表达式到底是个什么鬼。 简述Lambda表达式 Lambda表达式并不是Java 8特有的特性,其设计初衷是用于一些特定代码中,已知固定入参和固定返回值的时候,动态生成的一种函数。 举个栗子: 1public Var3 func(Var1 var1, Var2 var2) { 2Var3 var3 = doSomeThing(var1, var2); 3return var3; 4} 上述代码是我们常见的Java代码格式,假如说我们已经设定这个函数只会被在特定位置被调用,或者换种说法,我 …
阅读更多highestOneBit 获取一个int类型的二进制取整 1public static int highestOneBit(int i) { 2 // HD, Figure 3-1 3 i |= (i >> 1); 4 i |= (i >> 2); 5 i |= (i >> 4); 6 i |= (i >> 8); 7 i |= (i >> 16); 8 return i - (i >>> 1); 9} 上述代码粗看会不理解实现原理,但是跟着推导一次就能理解算法的思想。假定一个int的二进制表达式是100001000,这个常数的迭代过程如下: 第一次结束 100001000 -> 110001100 第二次结束 110001100 …
阅读更多一次debug到哭泣的经历。 龙云尧个人博客,转载请注明出处。 CSDN地址:http://blog.csdn.net/michael753951 个人blog地址:http://yaoyl.cn 在实验过程中,需要不断翻阅实验课PPT之**《04 电子钱包的功能》,word之《实验3文档》**,以及不知名大佬的课程总代码,CSDN大佬吕浪的Java card开发系列文章。 本次实验和前两次实验相比,代码量多很多,并且实验思路稍有区别。实验之前可以不太懂实验流程(主要是因为流程本身就太复杂了),但是一定要一遍又一遍阅读源代码,只有在读源码的过程中,才能体会整个验证过程,对项目中涉及到的函数方法的使用才能有一个更加深入的了解。接着自 …
阅读更多