引言
上篇博文,笔者带大家了解了自动装配流程中有关自动配置加载的流程;
本篇将介绍自动装配流程剩余的内容,包含了自动配置组件的排除和过滤、触发自动配置事件。
上篇博文,笔者带大家从整体上了解了AutoConfigurationImportSelector 自动装配逻辑的核心功能及流程,由于篇幅有限,更加细化的功能及流程详解还没有介绍。本篇开始将从其源码入手,重点解析细化后的自动装配流程源码。
上篇博文我们了解了 @EnableAutoConfiguration 注解,其中真正实现自动配置功能的核心实现者 AutoConfigurationImportSelector
还没有详细说明,本篇将从它的源码入手来重点介绍。
在 Huazie 的上篇博文中,我们详细了解了关于 @SpringBootApplication 注解的一些内容,文章最后提到了 @EnableAutoConfiguration
注解,用来开启 Spring Boot
的自动配置功能,这将是本篇将要重点讲解的内容。
在 Huazie 前面的博文 《Spring Boot 核心运行原理介绍》中,我们初步了解了 Spring Boot
核心运行原理,知道了 @EnableAutoConfiguration
是用来开启自动配置的注解。但创建过 Spring Boot 项目的读者肯定会说,我们并没有直接看到这个注解,实际上前面我也提到,它是由组合注解 @SpringBootApplication
引入的。
还记得,笔者在前面的博文《Spring Boot 项目介绍》中提到了,Spring Boot 最核心的功能就是自动配置,该功能的实现是基于 “约定由于配置” 的原则。
上篇介绍了 ThreadPoolExecutor
配置和扩展相关的信息,本篇开始将介绍递归算法的并行化。
还记得我们在《Java并发编程学习11-任务执行演示》中,对页面绘制程序进行一系列改进,这些改进大大地提供了页面绘制的并行性。
函数声明 | 函数功能 |
---|---|
char *gcvt(double value, int ndigit, char *buf); |
把浮点数转换成字符串,同时返回一个指向字符串的存储位置的指针的函数。 |
void getarccoords(struct arccoordstype *arccoords); |
取最后一次调用arc的坐标 |
int getbkcolor(void); |
获取当前背景颜色 |
int getc(FILE *stream); |
从流中取字符 |
int getchar(void); |
从 stdin 流中读字符 |
int getcolor(void); |
当前画线的颜色 |
char *getcwd(char *buffer, int maxlen); |
获取当前工作目录 |
struct palettetype* getdefaultpalette(void); |
获取调色板定义结构 |
char *getdrivename(void); |
获取当前图形驱动程序名字 |
void getfillpattern(char *upattern); |
将用户定义的填充模式拷贝到内存中 |
void getfillsettings(struct fillsettingstype *fillinfo); |
获取有关当前填充模式和填充颜色的信息 |
int getgraphmode(void); |
获取当前图形模式 |
void getimage(int left, int top, int right, int bottom, void *bitmap); |
保存指定区域的屏幕上的像素图形到指定的内存区域 |
void getlinesettings(struct linesettingstype *lininfo); |
取当前线型、模式和宽度 |
int getmaxcolor(void); |
可以传给函数 setcolor 的最大颜色值 |
int getmaxx(void); |
屏幕的最大x坐标 |
int getmaxy(void); |
屏幕的最大y坐标 |
函数声明 | 函数功能 |
---|---|
char *gcvt(double value, int ndigit, char *buf); |
把浮点数转换成字符串,同时返回一个指向字符串的存储位置的指针的函数。 |
参数:
value: 被转换的值。
ndigit: 存储的有效数字位数。
buf: 结果的存储位置。
注意: gcvt 函数把一个浮点值转换成一个字符串 (包括一个小数点和可能的符号字节) 并存储该字符串在 buffer 中。该 buffer 应足够大以便容纳转换的值加上结尾的 结束符
'\0'
,它是自动添加的。
如果一个缓冲区的大小为 ndigit + 1,则 gcvt 函数将覆盖该缓冲区的末尾。这是因为转换的字符串包括一个小数点以及可能包含符号和指数信息。
1 |
|
函数声明 | 函数功能 |
---|---|
void getarccoords(struct arccoordstype *arccoords); |
取最后一次调用arc的坐标 |
1 |
|
上述代码是一个简单的图形程序,使用了图形库函数 arc
来绘制一个弧线并显示其起始和结束点的坐标。
大致逻辑如下:
(midx, midy)
。45
度,结束角度为 270
度,半径为 100
像素。arc
函数时的坐标信息,并将其存储在 arcinfo
结构体中。sprintf
函数将起始点和结束点的坐标格式化为字符串。函数声明 | 函数功能 |
---|---|
int getbkcolor(void); |
获取当前背景颜色 |
颜色值 | 英文枚举 | 中文描述 |
---|---|---|
0 | BLACK | 黑 |
1 | BLUE | 蓝 |
2 | GREEN | 绿 |
3 | CYAN | 青 |
4 | RED | 红 |
5 | MAGENTA | 洋红 |
6 | BROWN | 棕 |
7 | LIGHTGRAY | 淡灰 |
8 | DARKGRAY | 深灰 |
9 | LIGHTBLUE | 淡兰 |
10 | LIGHTGREEN | 淡绿 |
11 | LIGHTCYAN | 淡青 |
12 | LIGHTRED | 淡红 |
13 | LIGHTMAGENTA | 淡洋红 |
14 | YELLOW | 黄 |
15 | WHITE | 白 |
1 |
|
上述也是一个简单的图形程序,通过使用图形库来绘制背景颜色变化。
下面来简单总结下:
(midx, midy)
。i
所代表的颜色。bkcolor
数组中。bkname
字符串中。函数声明 | 函数功能 |
---|---|
int getc(FILE *stream); |
从流中取字符 |
1 |
|
函数声明 | 函数功能 |
---|---|
int getchar(void); |
从 stdin 流中读字符 |
1 |
|
函数声明 | 函数功能 |
---|---|
int getcolor(void); |
当前画线的颜色 |
颜色值 | 英文枚举 | 中文描述 |
---|---|---|
0 | BLACK | 黑 |
1 | BLUE | 蓝 |
2 | GREEN | 绿 |
3 | CYAN | 青 |
4 | RED | 红 |
5 | MAGENTA | 洋红 |
6 | BROWN | 棕 |
7 | LIGHTGRAY | 淡灰 |
8 | DARKGRAY | 深灰 |
9 | LIGHTBLUE | 淡兰 |
10 | LIGHTGREEN | 淡绿 |
11 | LIGHTCYAN | 淡青 |
12 | LIGHTRED | 淡红 |
13 | LIGHTMAGENTA | 淡洋红 |
14 | YELLOW | 黄 |
15 | WHITE | 白 |
1 |
|
上述程序,通过使用图形库,在一个循环中遍历所有颜色,每次在屏幕中心显示当前颜色的名称和值,等待用户按键后更改颜色并清除屏幕,直到所有颜色展示完毕。
函数声明 | 函数功能 |
---|---|
char *getcwd(char *buffer, int maxlen); |
获取当前工作目录 |
注意:getcwd 函数是将当前工作目录的绝对路径复制到参数 buffer 所指的内存空间中,参数 maxlen 为 buffer 的空间大小。
1 |
|
函数声明 | 函数功能 |
---|---|
struct palettetype* getdefaultpalette(void); |
获取调色板定义结构 |
1 |
|
函数声明 | 函数功能 |
---|---|
char *getdrivename(void); |
获取当前图形驱动程序名字 |
1 |
|
函数声明 | 函数功能 |
---|---|
void getfillpattern(char *upattern); |
将用户定义的填充模式拷贝到内存中 |
1 |
|
函数声明 | 函数功能 |
---|---|
void getfillsettings(struct fillsettingstype *fillinfo); |
获取有关当前填充模式和填充颜色的信息 |
1 |
|
函数声明 | 函数功能 |
---|---|
int getgraphmode(void); |
获取当前图形模式 |
1 |
|
函数声明 | 函数功能 |
---|---|
void getimage(int left, int top, int right, int bottom, void *bitmap); |
保存指定区域的屏幕上的像素图形到指定的内存区域 |
1 |
|
函数声明 | 函数功能 |
---|---|
void getlinesettings(struct linesettingstype *lininfo); |
取当前线型、模式和宽度 |
1 |
|
函数声明 | 函数功能 |
---|---|
int getmaxcolor(void); |
可以传给函数 setcolor 的最大颜色值 |
1 |
|
函数声明 | 函数功能 |
---|---|
int getmaxx(void); |
屏幕的最大x坐标 |
int getmaxy(void); |
屏幕的最大y坐标 |
1 |
|