《Java组件设计》PDF下载

  • 购买积分:12 如何计算积分?
  • 作  者:孔德生编著
  • 出 版 社:北京:电子工业出版社
  • 出版年份:2009
  • ISBN:9787121081651
  • 页数:308 页
图书介绍:本书主要讲解企业应用中核心组件的设计原则与最佳实践,澄清设计模式、数据结构、多线程、接口设计等多个高阶技术领域中“流行”的认知误区,通过大量的组件实例分析,为读者精彩讲解组件设计这一最具技术含量的领域需要考虑的核心问题、设计方案与最佳实践。这本书主要涵盖三部分的内容:第一部分,主要讲解了应用程序的架构、组件的定义和组件核心设计原则。这些原则,都是在大量的企业软件实践中浓缩提炼的精华;第二部分,对Java语言的高级主题进行了详尽的阐述,作为组件实战的必需必备基础功力;第三部分,对企业应用的核心组件,进行需求分析、设计和实现。核心组件包括:配置组件、Socket通信组件、日志组件、数据库访问组件、JSON转换组件、权限组件。本书主要定位于软件架构师、设计师、高级开发人员在企业实际应用开发中参考读物,也适合于大中院校相关专业作为教材辅导图书阅读。

第1篇 组件设计总括 2

第1章 组件设计概述 2

1.1应用软件的总体架构 2

1.2组件定义及与其相关概念的澄清 4

1.3总结 7

第2章 组件设计原则 8

2.1组件定位:精准地解决共性问题 10

2.2组件设计:无配置文件 11

2.3组件设计:与使用者概念一致 12

2.4组件设计:业务无关的中立性 13

2.5组件设计实现:对使用环境无假设 13

2.6组件设计实现:单类设计和实现 14

2.7总结 14

第2篇 组件设计的基础知识 16

第3章 预备知识 16

3.1 Java语法深入讲解 16

3.1.1 static 16

3.1.2嵌套类 18

3.1.3静态嵌套类 20

3.2反射 21

3.3数据结构 23

3.3.1 ArrayList 23

3.3.2 LinkedList 24

3.3.3 HashSet 24

3.3.4 HashMap 25

3.4泛型 26

3.4.1泛型简介 26

3.4.2泛型应用在接口上 30

3.4.3泛型应用在类上 30

3.4.4泛型应用在方法上 31

3.4.5限制泛型的可用类型 31

3.4.6通配符泛型 34

3.4.7泛型深入 36

3.5线程 42

3.5.1线程基础 42

3.5.2多线程同步 46

3.5.3线程的阻塞 50

3.5.4守护线程 52

3.5.5多线程范例 52

第3篇 组件设计 61

第4章 配置组件 61

4.1配置文件格式 61

4.2 DTD,还是Schema 64

4.3接口设计 68

4.3.1设计思路 68

4.3.2复合元素映射 69

4.3.3接口设计 73

4.3.4接口重构 78

4.4接口实现 85

4.4.1主要实现结构 85

4.4.2 DOM根节点解析 86

4.4.3 XML数据设置为对象属性 87

4.4.4补充说明 92

4.5总结 92

第5章 Socket通信组件 93

5.1使用场景 93

5.2需求分析 93

5.2.1系统内,还是系统间 94

5.2.2 TCP,还是UDP 94

5.2.3点对点,还是广播 95

5.2.4单连接,还是多连接 95

5.2.5安全问题 96

5.2.6包边界问题 96

5.2.7连接管理 97

5.3客户端接口设计 99

5.3.1设计原则 99

5.3.2配置接口 100

5.3.3功能接口 101

5.3.4事件通知接口 101

5.4客户端技术实现 104

5.4.1技术实现选型 104

5.4.2配置接口实现 104

5.4.3功能接口实现 104

5.5服务端接口设计 113

5.5.1设计原则 113

5.5.2配置接口 114

5.5.3功能接口 115

5.5.4事件通知接口 116

5.6服务端技术实现 118

5.6.1技术实现选型 118

5.6.2配置接口实现 119

5.6.3功能接口实现 120

5.7总结 133

第6章 日志组件 134

6.1使用场景 134

6.2需求分析 137

6.2.1单例,或多例 137

6.2.2异步,还是同步 137

6.2.3单线程,还是多线程 137

6.2.4集中监控 138

6.2.5在线修改配置 138

6.2.6日志格式 139

6.2.7日志内容 139

6.2.8容错考虑 140

6.3接口设计 141

6.3.1核心设计要点 141

6.3.2配置接口设计 141

6.3.3功能接口设计 142

6.3.4日志转换接口 144

6.4接口实现 145

6.4.1技术选型 145

6.4.2配置接口实现 145

6.4.3功能接口实现 148

6.4.4日志转换接口实现 153

6.5总结 153

第7章 数据库访问组件 154

7.1需求分析 155

7.1.1数据库类型 155

7.1.2数据库连接 155

7.1.3单实例,还是多实例 156

7.1.4 ORM,还是SQL 156

7.1.5什么样的结果集 156

7.1.6结果集分页、合并 157

7.1.7存储过程 157

7.1.8对象的直接数据操作 158

7.1.9事务 159

7.1.10缓存 159

7.2 DBAccess接口设计 160

7.2.1设计思路 160

7.2.2配置接口设计 163

7.2.3连接管理 164

7.2.4 SQL接口设计 166

7.2.5批操作接口 169

7.2.6存储过程接口设计 169

7.2.7事务接口 178

7.2.8结果集转换为对象 179

7.2.9对象的直接数据库操作 180

7.2.10接口汇总 181

7.3 DBMonitor设计 186

7.4数据对象映射规则设计 189

7.4.1规则表示法 189

7.4.2定义Annotation 190

7.4.3代码生成工具 193

7.5 DataSet设计 199

7.5.1基本信息 200

7.5.2数据的随机访问 200

7.5.3列值读取 201

7.5.4数据的增、删、改 202

7.5.5数据集的分割、合并 203

7.5.6 DataSetMetaData 204

7.5.7 DataSet接口汇总 205

7.6 DBAccess接口实现 207

7.6.1配置接口实现 207

7.6.2连接管理实现 208

7.6.3事务接口实现 214

7.6.4SQL接口实现 216

7.6.5批操作接口实现 222

7.6.6存储过程接口实现 223

7.6.7数据集转换为对象实现 229

7.6.8对象的直接数据库操作实现 235

7.7总结 237

第8章 JSON转换器 238

8.1引言 238

8.1.1传统Web应用 238

8.1.2 Ajax应用 239

8.1.3数据规则 241

8.2需求分析 243

8.2.1需求场景 243

8.2.2核心功能 244

8.3接口设计 247

8.3.1设计原则 247

8.3.2 JSON->Java 248

8.3.3 Java->JSON 248

8.3.4接口汇总 249

8.4接口实现 249

8.4.1 json2Obj实现 249

8.4.2 obj2Json实现 254

8.5总结 257

第9章 权限组件 258

9.1引言 258

9.2需求分析 258

9.2.1应用场景 258

9.2.2权限分类 260

9.2.3角色 265

9.2.4组织结构 266

9.2.5需求汇总 266

9.3接口设计 267

9.3.1标识用户 268

9.3.2获得发起请求的用户 268

9.3.3拦截HTTP请求 270

9.3.4权限组件和应用系统之间访问 270

9.3.5应用系统的权限定义 273

9.3.6应用系统调用权限组件 282

9.3.7用户权限变更 282

9.3.8 Session超时失效 283

9.3.9 AuthFilter接口汇总 285

9.3.10 AuthFilterImpl实现原型 286

9.3.11部署配置 287

9.4接口实现 288

9.4.1实现思路 288

9.4.2私有成员变量 288

9.4.3 init方法实现 290

9.4.4 doFilter方法实现 293

9.4.5 canAccess方法实现 298

9.4.6 reloadRoleAuths方法实现 298

9.4.7 sessionDestroy方法实现 300

9.5权限应用示例 301

9.5.1系统简介 301

9.5.2运行示例 302

9.5.3实现介绍 305

9.6总结 308

共性的业务问题,是组件的产生来源 10

技术与业务对齐,这是组件设计的第一位重要原则 11

最简单的组件,就是一个类 14

高内聚!高内聚!单类组件,简单到极致! 14

本质上讲,static关键字声明了一个全局变量。 16

在泛型代码中,根本就没有参数化类型的信息 39

发布函数的原型相对稳定,不会频繁发生修改 76

从接口上看,只有一个Static方法,没有任何Get或Set方法,因此不满足IOC容器的规范,无法被放入IOC容器中,因此也无法与其他组件进行基于IOC容器的集成。这可是个大问题!! 83

因此,使用IOC容器作为物理部署、实施的配置方式,是不合适的。这里编写的配置组件,是用于部署实施的有力武器! 83

获取满足条件的Key集合,遍历Key集合,取出每个Key,判断Key是否是下面三种状态之一:acceptable,readable,writable,从而对应地进行接收连接、数据读取、发送数据的操作。 127

大量的软件开发实践证明,进行复杂数据操作的应用系统中,存储过程是解决问题的最有效方案。 158

应用程序的开发者,不需要编写太多类,就可以将结果集转换为对象,获得类似ORM框架的功能。最理想的情况就是一个类也不增加。 179

作为组件设计者,应该让组件的使用者做且仅做他们必须做的事情,摒弃任何不必要、烦琐、无意义的环节。 189

这种情况下,如何实现互相之间的访问,就成了一个难题! 271

大多数Web应用,使用Spring作为IOC容器来实例化、配置各种后台组件。而Spring自身在Deployment Descriptor中是作为一个Listener被Web Container实例化的。Listener的初始化过程,早于Filter的初始化过程,因此当权限组件开始被WebContainer初始化时,SpringIOC容器和IOC容器内的各种后台组件都已经初始化完毕。这样,在权限组件的初始化参数中,配置一个类名,应用程序提供这个类的实现,而权限组件动态实例化这个类,通过这个类的实例作为桥梁,获得应用程序实例的访问,这种方式是可行的。 271

只有角色产生了变化,才需要权限组件更新内部的权限数据。而用户变化、用户权限、用户角色变化等,都不需要权限组件更新内部的权限数据。 282