题名:Spring 3.x企业应用开发实战
作者:陈雄华, 林开雄著
出版年:2012
ISBN: 978-7-121-15213-9
分类号: TP312
中图分类: 程序语言、算法语言
定价: 90.00元
页数: 710 页
出版社: 电子工业出版社
装订: 平装

内容简介<br />Spring 3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。<br />Spring 3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架、REST风格的Web编程模型等。这些新功能实用性强、易用性高,可大幅降低Java应用,特别是Java Web应用开发的难度,同时有效提升应用开发的优雅性。<br />本书是在《精通Spring 2.x——企业应用开发详解》的基础上,经过历时一年的重大调整改版而成的,本书延续了上一版本追求深度,注重原理,不停留在技术表面的写作风格,力求使读者在熟练使用Spring的各项功能的同时,还能透彻理解Spring的内部实现,真正做到知其然知其所以然。此外,本书重点突出了“实战性”的主题,力求使全书“从实际项目中来,到实际项目中去”。<br />目录<br />第1篇 概述<br />第1章 Spring概述 2<br />1.1 认识Spring 3<br />1.2 关于SpringSource 4<br />1.3 Spring带给我们什么 5<br />1.4 Spring体系结构 6<br />1.5 Spring 3.0的新功能 8<br />1.5.1 核心API更新到Java 5.0 8<br />1.5.2 Spring表达式语言 8<br />1.5.3 可通过Java类提供IoC配置信息 9<br />1.5.4 通用类型转换系统和属性格式化<br />系统 10<br />1.5.5 数据访问层新增OXM功能 10<br />1.5.6 Web层的增强 10<br />1.5.7 其他 11<br />1.6 Spring对Java版本的要求 11<br />1.7 如何获取Spring 11<br />1.8 小结 12<br />第2章 快速入门 13<br />2.1 实例功能概述 14<br />2.1.1 比Hello World更适用的实例 14<br />2.1.2 实例功能简介 14<br />2.2 环境准备 16<br />2.2.1 创建库表 16<br />2.2.2 建立工程 17<br />2.2.3 类包及Spring配置文件规划 19<br />2.3 持久层 20<br />2.3.1 建立领域对象 20<br />2.3.2 UserDao 21<br />2.3.3 LoginLogDao 24<br />2.3.4 在Spring中装配DAO 24<br />2.4 业务层 26<br />2.4.1 UserService 26<br />2.4.2 在Spring中装配Service 27<br />2.4.3 单元测试 29<br />2.5 展现层 31<br />2.5.1 配置Spring MVC框架 31<br />2.5.2 处理登录请求 33<br />2.5.3 JSP视图页面 35<br />2.6 运行Web应用 37<br />2.7 小结 38<br />第2篇 IoC和AOP<br />第3章 IoC容器概述 40<br />3.1 IoC概述 41<br />3.1.1 通过实例理解IoC的概念 41<br />3.1.2 IoC的类型 43<br />3.1.3 通过容器完成依赖关系的注入 45<br />3.2 相关Java基础知识 46<br />3.2.1 简单实例 46<br />3.2.2 类装载器ClassLoader 48<br />3.2.3 Java反射机制 51<br />3.3 资源访问利器 53<br />3.3.1 资源抽象接口 53<br />3.3.2 资源加载 56<br />3.4 BeanFactory和ApplicationContext 58<br />3.4.1 BeanFactory介绍 58<br />3.4.2 ApplicationContext介绍 61<br />3.4.3 父子容器 68<br />3.5 Bean的生命周期 68<br />3.5.1 BeanFactory中Bean的生命周期 68<br />3.5.2 ApplicationContext中Bean的<br />生命周期 77<br />3.6 小结 79<br />第4章 在IoC容器中装配Bean 80<br />4.1 Spring配置概述 81<br />4.1.1 Spring容器高层视图 81<br />4.1.2 基于XML的配置 82<br />4.2 Bean基本配置 84<br />4.2.1 装配一个Bean 84<br />4.2.2 Bean的命名 85<br />4.3 依赖注入 86<br />4.3.1 属性注入 86<br />4.3.2 构造函数注入 89<br />4.3.3 工厂方法注入 93<br />4.3.4 选择注入方式的考量 94<br />4.4 注入参数详解 95<br />4.4.1 字面值 95<br />4.4.2 引用其他Bean 96<br />4.4.3 内部Bean 98<br />4.4.4 null值 98<br />4.4.5 级联属性 98<br />4.4.6 集合类型属性 99<br />4.4.7 简化配置方式 103<br />4.4.8 自动装配 106<br />4.5 方法注入 107<br />4.5.1 lookup方法注入 107<br />4.5.2 方法替换 108<br />4.6 <bean>之间的关系 109<br />4.6.1 继承 109<br />4.6.2 依赖 110<br />4.6.3 引用 111<br />4.7 整合多个配置文件 112<br />4.8 Bean作用域 113<br />4.8.1 singleton作用域 113<br />4.8.2 prototype作用域 114<br />4.8.3 Web应用环境相关的Bean<br />作用域 115<br />4.8.4 作用域依赖问题 117<br />4.9 FactoryBean 118<br />4.10 基于注解的配置 120<br />4.10.1 使用注解定义Bean 120<br />4.10.2 使用注解配置信息启动Spring<br />容器 120<br />4.10.3 自动装配Bean 122<br />4.10.4 Bean作用范围及生命过程方法 125<br />4.11 基于Java类的配置 127<br />4.11.1 使用Java类提供Bean定义<br />信息 127<br />4.11.2 使用基于Java类的配置信息<br />启动Spring容器 130<br />4.12 不同配置方式比较 132<br />4.13 小结 134<br />第5章 Spring容器高级主题 135<br />5.1 Spring容器技术内幕 136<br />5.1.1 内部工作机制 136<br />5.1.2 BeanDefinition 139<br />5.1.3 InstantiationStrategy 140<br />5.1.4 BeanWrapper 140<br />5.2 属性编辑器 141<br />5.2.1 JavaBean的编辑器 142<br />5.2.2 Spring默认属性编辑器 145<br />5.2.3 自定义属性编辑器 146<br />5.3 使用外部属性文件 149<br />5.3.1 使用外部属性文件 149<br />5.3.2 使用加密的属性文件 151<br />5.3.3 属性文件自身的引用 155<br />5.4 引用Bean的属性值 156<br />5.5 国际化信息 158<br />5.5.1 基础知识 158<br />5.5.2 MessageSource 163<br />5.5.3 容器级的国际化信息资源 166<br />5.6 容器事件 167<br />5.6.1 Spring事件类结构 168<br />5.6.2 解构Spring事件体系的具体<br />实现 169<br />5.6.3 一个实例 170<br />5.7 小结 172<br />第6章 Spring AOP基础 173<br />6.1 AOP概述 174<br />6.1.1 AOP到底是什么 174<br />6.1.2 AOP术语 176<br />6.1.3 AOP的实现者 178<br />6.2 基础知识 178<br />6.2.1 带有横切逻辑的实例 178<br />6.2.2 JDK动态代理 181<br />6.2.3 CGLib动态代理 184<br />6.2.4 AOP联盟 186<br />6.2.5 代理知识小结 186<br />6.3 创建增强类 187<br />6.3.1 增强类型 187<br />6.3.2 前置增强 188<br />6.3.3 后置增强 192<br />6.3.4 环绕增强 193<br />6.3.5 异常抛出增强 194<br />6.3.6 引介增强 196<br />6.4 创建切面 199<br />6.4.1 切点类型 200<br />6.4.2 切面类型 201<br />6.4.3 静态普通方法名匹配切面 203<br />6.4.4 静态正则表达式方法匹配切面 205<br />6.4.5 动态切面 208<br />6.4.6 流程切面 211<br />6.4.7 复合切点切面 213<br />6.4.8 引介切面 215<br />6.5 自动创建代理 216<br />6.5.1 实现类介绍 217<br />6.5.2 BeanNameAutoProxyCreator 217<br />6.5.3 DefaultAdvisorAutoProxyCreator 219<br />6.6 小结 220<br />第7章 基于@AspectJ和Schema的AOP 221<br />7.1 Spring对AOP的支持 222<br />7.2 JDK 5.0注解知识快速进阶 222<br />7.2.1 了解注解 222<br />7.2.2 一个简单的注解类 223<br />7.2.3 使用注解 224<br />7.2.4 访问注解 225<br />7.3 着手使用@AspectJ 226<br />7.3.1 使用前的准备 226<br />7.3.2 一个简单的例子 227<br />7.3.3 如何通过配置使用@AspectJ<br />切面 229<br />7.4 @AspectJ语法基础 230<br />7.4.1 切点表达式函数 230<br />7.4.2 在函数入参中使用通配符 231<br />7.4.3 逻辑运算符 232<br />7.4.4 不同增强类型 232<br />7.4.5 引介增强用法 233<br />7.5 切点函数详解 235<br />7.5.1 @annotation() 235<br />7.5.2 execution() 237<br />7.5.3 args()和@args() 238<br />7.5.4 within() 240<br />7.5.5 @within()和@target() 240<br />7.5.6 target()的this() 241<br />7.6 @AspectJ进阶 243<br />7.6.1 切点复合运算 243<br />7.6.2 命名切点 244<br />7.6.3 增强织入的顺序 245<br />7.6.4 访问连接点信息 246<br />7.6.5 绑定连接点方法入参 247<br />7.6.6 绑定代理对象 249<br />7.6.7 绑定类注解对象 249<br />7.6.8 绑定返回值 250<br />7.6.9 绑定抛出的异常 251<br />7.7 基于Schema配置切面 252<br />7.7.1 一个简单切面的配置 252<br />7.7.2 配置命名切点 253<br />7.7.3 各种增强类型的配置 255<br />7.7.4 绑定连接点信息 257<br />7.7.5 Advisor配置 258<br />7.8 混合切面类型 259<br />7.8.1 混合使用各种切面类型 260<br />7.8.2 各种切面类型总结 261<br />7.9 JVM Class文件字节码转换基础<br />知识 261<br />7.9.1 java.lang.instrument包的工作<br />原理 262<br />7.9.2 如何向JVM中注册转换器 263<br />7.9.3 使用JVM启动参数注册<br />转换器的问题 265<br />7.10 使用LTW织入切面 265<br />7.10.1 Spring的LoadTimeWeaver 266<br />7.10.2 使用LTW织入一个切面 268<br />7.10.3 在Tomcat下的配置 270<br />7.10.4 在其他Web应用服务器下的<br />配置 271<br />7.11 小结 271<br />第3篇 数据访问<br />第8章 Spring对DAO的支持 274<br />8.1 Spring的DAO理念 275<br />8.2 统一的异常体系 275<br />8.2.1 Spring的DAO异常体系 276<br />8.2.2 JDBC的异常转换器 278<br />8.2.3 其他持久技术的异常转换器 278<br />8.3 统一数据访问模板 279<br />8.3.1 使用模板和回调机制 279<br />8.3.2 Spring为不同持久化技术所<br />提供的模板类 281<br />8.4 数据源 282<br />8.4.1 配置一个数据源 282<br />8.4.2 获取JNDI数据源 287<br />8.4.3 Spring的数据源实现类 287<br />8.5 小结 288<br />第9章 Spring的事务管理 289<br />9.1 数据库事务基础知识 290<br />9.1.1 何为数据库事务 290<br />9.1.2 数据并发的问题 291<br />9.1.3 数据库锁机制 293<br />9.1.4 事务隔离级别 294<br />9.1.5 JDBC对事务支持 294<br />9.2 ThreadLocal基础知识 296<br />9.2.1 ThreadLocal是什么 296<br />9.2.2 ThreadLocal的接口方法 297<br />9.2.3 一个TheadLocal实例 298<br />9.2.4 与Thread同步机制的比较 299<br />9.2.5 Spring使用ThreadLocal解决<br />线程安全问题 300<br />9.3 Spring对事务管理的支持 301<br />9.3.1 事务管理关键抽象 302<br />9.3.2 Spring的事务管理器实现类 305<br />9.3.3 事务同步管理器 307<br />9.3.4 事务传播行为 309<br />9.4 编程式的事务管理 309<br />9.5 使用XML配置声明式事务 310<br />9.5.1 一个将被实施事务增强的<br />服务接口 312<br />9.5.2 使用原始的<br />TransactionProxyFactoryBean 313<br />9.5.3 基于tx/aop命名空间的配置 315<br />9.6 使用注解配置声明式事务 318<br />9.6.1 使用@Transactional注解 318<br />9.6.2 通过AspectJ LTW引入事务<br />切面 322<br />9.7 集成特定的应用服务器 323<br />9.7.1 BEA WebLogic 324<br />9.7.2 BEA WebLogic 324<br />9.8 小结 324<br />第10章 Spring的事务管理难点剖析 325<br />10.1 DAO和事务管理的牵绊 326<br />10.1.1 JDBC访问数据库 326<br />10.1.2 Hibernate访问数据库 328<br />10.2 应用分层的迷惑 330<br />10.3 事务方法嵌套调用的迷茫 334<br />10.3.1 Spring事务传播机制回顾 334<br />10.3.2 相互嵌套的服务方法 335<br />10.4 多线程的困惑 338<br />10.4.1 Spring通过单实例化Bean<br />简化多线程问题 338<br />10.4.2 启动独立线程调用事务方法 338<br />10.5 联合军种作战的混乱 340<br />10.5.1 Spring事务管理器的应对 340<br />10.5.2 Hibernate+Spring JDBC<br />混合框架的事务管理 341<br />10.6 特殊方法成漏网之鱼 345<br />10.6.1 哪些方法不能实施Spring AOP<br />事务 345<br />10.6.2 事务增强遗漏实例 345<br />10.7 数据连接泄漏 349<br />10.7.1 底层连接资源的访问问题 349<br />10.7.2 Spring JDBC数据连接泄漏 350<br />10.7.3 通过DataSourceUtils获取<br />数据连接 353<br />10.7.4 通过DataSourceUtils获取<br />数据连接 355<br />10.7.5 JdbcTemplate如何做到对连接<br />泄漏的免疫 357<br />10.7.6 使用TransactionAwareData<br />SourceProxy 357<br />10.7.7 其他数据访问技术的等价类 358<br />10.8 小结 359<br />第11章 使用Spring JDBC访问数据库 361<br />11.1 使用Spring JDBC 362<br />11.1.1 JDBCTemplate小试牛刀 362<br />11.1.2 在DAO中使用JDBCTemplate 363<br />11.2 基本的数据操作 364<br />11.2.1 更改数据 364<br />11.2.2 返回数据库的表自增主键值 367<br />11.2.3 批量更改数据 369<br />11.2.4 查询数据 370<br />11.2.5 查询单值数据 373<br />11.2.6 调用存储过程 375<br />11.3 BLOB/CLOB类型数据的操作 377<br />11.3.1 如何获取本地数据连接 377<br />11.3.2 相关的操作接口 379<br />11.3.3 插入Lob类型的数据 380<br />11.3.4 以块数据方式读取Lob数据 383<br />11.3.5 以流数据方式读取Lob数据 383<br />11.4 自增键和行集 384<br />11.4.1 自增键的使用 384<br />11.4.2 如何规划主键方案 386<br />11.4.3 以行集返回数据 388<br />11.5 其他类型的JDBCTemplate 389<br />11.5.1 NamedParameterJDBCTemplate 389<br />11.5.2 SimpleJDBCTemplate 391<br />11.6 以OO方式访问数据库 391<br />11.6.1 使用MappingSqlQuery查询<br />数据 391<br />11.6.2 使用SqlUpdate更新数据 393<br />11.6.3 使用StoredProcedure执行存储<br />过程 394<br />11.6.4 SqlFunction类 396<br />11.7 小结 396<br />第12章 整合其他ORM框架 398<br />12.1 Spring整合ORM技术 399<br />12.2 在Spring中使用Hibernate 400<br />12.2.1 配置SessionFactory 400<br />12.2.2 使用HibernateTemplate 403<br />12.2.3 处理LOB类型数据 407<br />12.2.4 添加Hibernate事件监听器 409<br />12.2.5 使用原生Hibernate API 409<br />12.2.6 使用注解配置 410<br />12.2.7 事务处理 412<br />12.2.8 延迟加载的问题 413<br />12.3 在Spring中使用myBatis 414<br />12.3.1 配置SqlMapClient 415<br />12.3.2 在Spring配置myBatis 416<br />12.3.3 编写myBatis的DAO 417<br />12.5 DAO层设计 420<br />12.5.1 DAO基类的设计 421<br />12.5.2 查询接口方法的设计 423<br />12.5.3 分页查询接口设计 424<br />12.6 小结 425<br />第4篇 业务层及Web层技术<br />第13章 任务调度和异步执行器 428<br />13.1 任务调度概述 429<br />13.2 Quartz快速进阶 429<br />13.2.1 Quartz基础结构 430<br />13.2.2 使用SimpleTrigger 432<br />13.2.3 使用CronTrigger 434<br />13.2.4 使用Calendar 437<br />13.2.5 任务调度信息存储 439<br />13.3 在Spring中使用Quartz 442<br />13.3.1 创建JobDetail 442<br />13.3.2 创建Trigger 444<br />13.3.3 创建Scheduler 446<br />13.4 Spring中使用JDK Timer 447<br />13.4.1 Timer和TimerTask 448<br />13.4.2 Spring对JDK Timer的支持 450<br />13.5 Spring对JDK 5.0 Executor的<br />支持 451<br />13.5.1 了解JDK 5.0的Executor 452<br />13.5.2 Spring对Executor所提供的<br />抽象 454<br />13.6 实际应用中的任务调度 455<br />13.6.1 如何产生任务 456<br />13.6.2 任务调度对应用程序集群的<br />影响 457<br />13.6.3 任务调度云 458<br />13.6.4 Web应用程序中调度器的<br />启动和关闭问题 460<br />13.7 小结 462<br />第14章 使用OXM进行对象XML映射 463<br />14.1 认识XML解析技术 464<br />14.1.1 什么是XML 464<br />14.1.2 XML的处理技术 464<br />14.2 XML处理利器:XStream 466<br />14.2.1 XStream概述 466<br />14.2.2 快速入门 466<br />14.2.3 使用XStream别名 469<br />14.2.4 XStream转换器 470<br />14.2.5 XStream注解 472<br />14.2.6 流化对象 474<br />14.2.7 持久化API 475<br />14.2.8 额外功能:处理JSON 476<br />14.3 其他常见O/X Mapping开源项目 478<br />14.3.1 JAXB 478<br />14.3.2 XMLBeans 482<br />14.3.3 Castor 485<br />14.3.4 JiBX 490<br />14.3.5 总结比较 493<br />14.4 与Spring OXM整合 494<br />14.4.1 Spring OXM概述 494<br />14.4.2 整合OXM实现者 496<br />14.4.3 如何在Spring中进行配置 497<br />14.4.4 Spring OXM 简单实例 499<br />14.5 小结 501<br />第15章 Spring MVC 503<br />15.1 Spring MVC概述 504<br />15.1.1 体系结构 504<br />15.1.2 配置DispatcherServlet 505<br />15.1.3 一个简单的实例 510<br />15.2 注解驱动的控制器 514<br />15.2.1 使用@RequestMapping映射<br />请求 514<br />15.2.2 请求处理方法签名概述 518<br />15.2.3 处理方法签名详细说明 519<br />15.2.4 使用HttpMessageConverter<T> 523<br />15.2.5 处理模型数据 532<br />15.3 处理方法的数据绑定 538<br />15.3.1 数据绑定流程剖析 539<br />15.3.2 数据转换 539<br />15.3.3 数据格式化 545<br />15.3.4 数据校验 549<br />15.4 视图和视图解析器 558<br />15.4.1 认识视图 558<br />15.4.2 认识视图解析器 560<br />15.4.3 JSP和JSTL 561<br />15.4.4 模板视图 565<br />15.4.5 Excel 569<br />15.4.6 PDF 570<br />15.4.7 输出XML 572<br />15.4.8 输出JSON 573<br />15.4.9 使用XmlViewResolver 573<br />15.4.10 使用ResourceBundle<br />ViewResolver 574<br />15.4.11 混合使用多种视图技术 575<br />15.5 本地化解析 577<br />15.5.1 本地化概述 577<br />15.5.2 使用CookieLocaleResolver 578<br />15.5.3 使用SessionLocaleResolver 579<br />15.5.4 使用LocaleChangeInterceptor 579<br />15.6 文件上传 579<br />15.6.1 配置MultipartResolver 580<br />15.6.2 编写控制器和文件上传表单页面 580<br />15.7 杂项 581<br />15.7.1 静态资源处理 581<br />15.7.2 装配拦截器 586<br />15.7.3 异常处理 587<br />15.8 小结 589<br />第5篇 测试及实战<br />第16章 实战型单元测试 592<br />16.1 单元测试概述 593<br />16.1.1 为什么需要单元测试 593<br />16.1.2 单元测试之误解 594<br />16.1.3 单元测试之困境 595<br />16.1.4 单元测试基本概念 596<br />16.2 JUnit 4快速进阶 600<br />16.2.1 JUnit 4概述 600<br />16.2.2 JUnit 4生命周期 601<br />16.2.3 使用JUnit 4 601<br />16.3 模拟利器Mockito 608<br />16.3.1 模拟测试概述 608<br />16.3.2 创建Mock对象 608<br />16.3.3 设定Mock对象的期望行为及<br />返回值 609<br />16.3.4 验证交互行为 611<br />16.4 测试整合之王Unitils 612<br />16.4.1 Unitils概述 612<br />16.4.2 集成Spring 615<br />16.4.3 集成Hibernate 618<br />16.4.4 集成Dbunit 619<br />16.4.5 自定义扩展模块 620<br />16.5 使用Unitils测试DAO层 620<br />16.5.1 数据库测试的难点 621<br />16.5.2 扩展Dbunit用Excel准备数据 621<br />16.5.3 测试实战 624<br />16.6 使用unitils测试Service层 634<br />16.7 测试Web层 639<br />16.7.1 对LoginController进行单元<br />测试 640<br />16.7.2 使用Spring Servlet API模拟<br />对象 641<br />16.7.3 使用Spring RestTemplate测试 642<br />16.7.4 使用Selenium测试 644<br />16.8 小结 647<br />第17章 实战案例开发 648<br />17.1 论坛案例概述 649<br />17.1.1 论坛整体功能结构 649<br />17.1.2 论坛用例描述 649<br />17.1.3 主要功能流程描述 651<br />17.2 系统设计 655<br />17.2.1 技术框架选择 655<br />17.2.2 Web目录结构及类包结构规划 656<br />17.2.3 单元测试类包结构规划 657<br />17.2.4 系统的结构图 657<br />17.2.5 PO的类设计 658<br />17.2.6 持久层设计 659<br />17.2.7 服务层设计 659<br />17.2.8 Web层设计 660<br />17.2.9 数据库设计 661<br />17.3 开发前的准备 663<br />17.4 持久层开发 664<br />17.4.1 PO类 664<br />17.4.2 DAO基类 666<br />17.4.3 通过扩展基类所定义DAO类 671<br />17.4.4 DAO Bean的装配 672<br />17.4.5 使用Hibernate二级缓存 674<br />17.5 对持久层进行测试 676<br />17.5.1 配置Unitils测试环境 676<br />17.5.2 准备测试数据库及测试数据 677<br />17.5.3 编写DAO测试基类 678<br />17.5.4 编写BoardDao测试用例 678<br />17.6 服务层开发 680<br />17.6.1 UserService的开发 680<br />17.6.2 ForumService的开发 682<br />17.6.3 服务类Bean的装配 685<br />17.7 对服务层进行测试 686<br />17.7.1 编写Service测试基类 687<br />17.7.2 编写ForumService测试用例 687<br />17.8 Web层开发 689<br />17.8.1 BaseController的基类 689<br />17.8.2 用户登录和注销 691<br />17.8.3 用户注册 692<br />17.8.4 论坛管理 694<br />17.8.5 论坛普通功能 696<br />17.8.6 分页显示论坛版块的主题帖子 698<br />17.8.7 web.xml配置 702<br />17.8.8 Spring MVC配置 704<br />17.9 对Web层进行测试 705<br />17.9.1 编写Web测试基类 705<br />17.9.2 编写ForumManageController<br />测试用例 706<br />17.10 部署和运行应用 707<br />17.11 小结 710<br />以下内容详见本书配书光盘:<br />附录A JavaMail发送邮件 711<br />附录B 在Spring中开发Web Service 738

陈雄华,2002年毕业于厦门大学计算机与信息工程学院,获硕士学位。是宝宝淘科技有限公司的创始人之一(www.baobaotao.com)。这是一个服务于全国母婴用户的综合性网站,作者负责网站整体框架设计牲及核心代码开发的工作。技术开发之余,常将经验所得行诸于文字,作者是天极网、IT168的专栏作者,在各大技术网站、报刊杂志发表过数十篇技术文章,广受读者好评。于2005年出版《精通JBuilder 2005》,本书是2005年最畅销技术图书之一。
2006年毕业于集美大学软件工程专业,获取学士学位。资深软件工程师,精通Spring等优秀开源技术在企业的应用开发,主要研究方向包括业务基础平台、BPM、智能报表、分布式等技术。