spring bean加载

1. Bean获取时序图

阅读全文

spring bean scope

参考资料

  1. Spring官方文档 bean scope

阅读全文

spring bean lifecycle

前言

传统java对象的生命始于调用实例化对象的new运算符,并且当对象符合垃圾收集条件时调用finalize()方法。与传统的java对象相比,spring bean的生命周期不同。Spring框架提供了一下可用于控制bean生命周期的方法:

阅读全文

Mockito入门与实战

前言

在本地环境下,如果某个接口依赖第三方接口,在做单元测试时,如果本地环境没有第三方接口,那么该怎么办呢?这个场景下,Mock框架就非常有用了。当调用第三方接口时,直接返回模拟的数据。这样可以绕过第三方接口的阻断,实现整个流程的测试。

阅读全文

SpringBoot使用Converter实现类型转换

前言

在Spring3引入了Converter,实现从一个Object转为另外一个Object;

实战

1. 注册Convert实现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@Component
public class StringToDateConverter implements Converter<String,Date>{
private SimpleDateFormat sdf;

public StringToDateConverter() {
sdf = new SimpleDateFormat("yyyy-MM-dd");
}

@Nullable
@Override
public Date convert(String s) {
Date date = null;
try {
date = sdf.parse(s);
} catch (ParseException e) {
e.printStackTrace();
}
return date;
}
}

阅读全文

java8之Funtion学习

前言

function是java8的特性,之前零零散散接触过,但是都没怎么深入研究过这块,先来个扫盲篇,后续再好好整理。

实战

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
package functiondemo;

import java.util.function.*;

/**
* @author jianweilin
* @date 2018/8/13
*/
public class FunctionDemo {
/**
* BiConsumer<T,U>
* T、U 均为入参,无返回值
*/
public static void biConsumer() {
BiConsumer<String, String> consumer = (x, y) -> {
System.out.println(String.format("x = %s,y=%s", x, y));
};
consumer.accept("test01", "test02");
}

/**
* BiFunction<T,U,R>
* T,U 为入参,R为返回值
*/
public static void biFunction() {
BiFunction<String, String, String> bi = (x, y) -> {
return x + y;
};

System.out.println(bi.apply("jian", ".com"));
}

/**
* BiPredicate<T,U>
* T,U 为入参,Boolean会返回值
*/
public static void biPredicate() {
BiPredicate<Integer, Integer> bi = (x, y) -> x > y;
BiPredicate<Integer, Integer> eq = (x, y) -> x - 2 > y;

System.out.println(bi.test(2, 3));
System.out.println(bi.and(eq).test(2, 3));
}

/**
* BinaryOperator<T>
* 两个入参,得到一个返回值
*/
public static void binaryOperator() {
BinaryOperator<Integer> operator = (n1, n2) -> n1 + n2;
System.out.println(operator.apply(3,4));
}

/**
* 返回一个boolean类型
*/
public static void booleanSupplier(){
BooleanSupplier bs = () -> true;
System.out.println(bs.getAsBoolean());
}

/**
* 一个函数接受一个入参,无返回值
*/
public static void consumer(){
Consumer<String> c = (x) -> System.out.println(x.toUpperCase());
c.accept("hello world!");
}

/**
* Function<T,R>
* 接受一个参数,并得到一个返回结果
*/
public static void function(){
Function<Integer,String> converter = (i) -> Integer.toString(i);
System.out.println(converter.apply(3).length());
System.out.println(converter.apply(30).length());
}

public static void main(String[] args) {
function();
}
}

阅读全文

mac终端崩溃

背景

执行brew update,在更新过程中,手动退出更新进程,导致Mac的终端崩溃,每次打开终端时都出现以下界面:

阅读全文

23.访问者模式

小故事

军营里,有指挥官的访问者、有中士的访问者、也有军士的访问者。

访问者模式

1. 定义

表示一个作用于某对象结构中的各元素的操作,它使你可以在不改变各元素的类的前提下定义这些元素的新操作。

阅读全文

22.解释器模式

小故事

实现一个计算器,实现加减法。

解释器模式

1. 定义

给定一个语言,定义它的语法的一种表示并定义一个解释器。

阅读全文

21.享元模式

小故事

炼金术商铺的货架上摆满了药水,每种药水都有多瓶。为了实现对象的复用,每种药水可以返回同一对象,实现对象的复用。

享元模式

1. 定义

运用共享技术有效地支持大量细粒度的对象

阅读全文