Spring 3.x权威开发指南:实施Java EE 6的利器

Size: px
Start display at page:

Download "Spring 3.x权威开发指南:实施Java EE 6的利器"

Transcription

1 Spring 3.x 权威开发指南 : 实施 Java EE 6 的利器 罗时飞著 年 3 月 25 日 版权所有 侵权必究

2 目录 序... VIII 前言... X 1 借助 Spring 3.0 实施 Java EE Java EE 6 编程模型讨论 Java EE 6 够敏捷,No! 盘旋于具体与抽象之间 挖掘 Spring 3.0 的架构价值 精耕细作于 Java EE 6 平台 面向 Spring 的 SpringSource Tool Suite 集成开发工具 全面拥抱 OSGi 开发者决定一切 下载及构建 Spring 下载 Spring 3.0 正式发布版 基于 SVN 库持续构建 Spring 源码 小结 控制反转容器 DI 及 Spring DI 概述 面向 Java ME/Java SE 的 BeanFactory 面向 Java EE 的 ApplicationContext 多种依赖注入方式 设值注入 构建器注入 属性注入 方法注入 借助 Autowiring 策略智能注入协作者 II

3 2.3.1 <bean/> 元素的 autowire 属性 注解加强协作者管理 注解的另一 Autowiring 策略 借助 primary 注解细粒度控制 Autowiring 策略 资源操控 将 DI 容器宿主到 Web 容器中 外在化配置应用参数 Spring 受管 Bean 的作用范围 Bean Validation 集成支持 回调接口集合及触发顺序 <util/> 命名空间 值得重视的若干 DI 特性 depends-on 属性 别名 (Alias) 工厂 Bean 和工厂方法 <p/> 命名空间 抽象和子 Bean 基于注解 (Annotation) 方式配置 DI 容器 Spring 表达式语言 (SpEL) 支持 核心接口及类 基于 API 方式使用 基于 XML 方式使用 基于 Annotation 注解使用 SpEL 语法速查 回调接口集合及其触发顺序 BeanNameAware 回调接口 BeanClassLoaderAware 回调接口 BeanFactoryAware 回调接口 ResourceLoaderAware 回调接口 III

4 ApplicationEventPublisherAware 回调接口 MessageSourceAware 回调接口 ApplicationContextAware 回调接口 注解 InitializingBean 回调接口 <bean/> 元素的 init-method 属性 注解 DisposableBean 回调接口 <bean/> 元素的 destroy-method 属性 小结 面向切面编程 AOP 及 Spring AOP 基础 细说 AOP Spring AOP 基础概念 AspectJ 6 初探 老式 Spring AOP 的 Spring AOP 基于 <aop:config/> 元素的 AOP 巧用 <aop:include/> 元素 在 AspectJ 6 注解 显式使用 AnnotationBeanConfigurerAspect 切面 注解 通过 META-INF/aop.xml( 或 aop-ajc.xml) 控制启用的切面集合 <context:spring-configured/> 元素 初探 <context:load-time-weaver/> 元素 小结 DAO 层集成支持 RDBMS 持久化操作抽象支持 IV

5 4.2 JDBC 集成支持 JDBC 最佳实践 事务集成支持 集成测试支持 在 AspectJ 6 注解 小结 Hibernate JPA 集成 Hibernate 集成支持 JPA 集成支持 智能处理 Java EE 容器中的装载期织入 (LTW) 小结 O/X Mapping 集成支持 O/X Mapping 集成支持 Marshaller 及 Unmarshaller 接口 实践 XMLBeans 集成支持 借助 Ant 生成 XMLBeans JAR XmlBeansMarshaller 实现类 <oxm:xmlbeans-marshaller/> 元素 小结 集成 Java EE 其他容器服务 简化 JNDI 操作 集成 EJB 线程池及任务调度集成支持 集成 JMS 集成 JavaMail 集成分布式操作 集成 JMX 集成 Java EE 连接器架构 V

6 7.9 小结 Web 层集成支持 Spring Web MVC 框架 Spring Portlet MVC 框架 REST 架构风格 小结 高级 Spring 3.0 特性 优雅销毁 DI 容器 小结 附录 A: 安装及使用 SpringSource Tool Suite 获得 SpringSource Tool Suite 安装 SpringSource Tool Suite 使用 SpringSource Tool Suite 针对 Spring 3.0 的支持 针对 Spring Web Flow 的支持 针对 Spring Batch 的支持 针对 Spring Roo 的支持 附录 B:Spring 3.0 内置的命名空间 <beans/> 命名空间 <context/> 命名空间 <util/> 命名空间 附录 C:Spring Web Services 文档驱动的 Web 服务 面向 OXM 的 Web 服务实现策略 Web 服务安全 附录 D:Spring Web Flow VI

7 13.1 流程致胜 探索 Spring Web Flow 附录 E:Spring BlazeDS Integration Flex-RIA 王者 简化 BlazeDS 的使用 深入到 Spring BlazeDS Integration 中 附录 F:Spring Roo 快速研发之道 Spring Roo 概述 Spring Roo 架构哲学 深入到 Spring Roo 中 附录 G: 相关资料 图书 网站 VII

8 序 序 从 2003 年开始, 开源 Spring 一直在同 Java EE 携手走来 Spring 2.0 之前 ( 包括 1.x 2.0 版本 ) 的版本一直在跟进 J2EE 1.4- 的发展, 而 Spring 2.5 跟进 Java EE 5,Spring 3.0 开始跟进 Java EE 6 的发展 当然, 这种跟进的深度和广度远远超越了 Java EE 本身 Java EE 被企业生产环境广泛采纳, 这在很大程度上要归功于这样几方面的因素 其一, Java 本身的跨平台能力, 即其可移植性强 其二,Java EE 服务器内置了大量的重要容器服务, 比如事务服务 JNDI 服务及连接池服务, 这些服务可供企业应用选用 其三, 开发者可以基于 Java EE API 研发企业应用, 并部署到企业生产环境中 然而,Java EE 暴露给开发者的客户视图存在重大缺陷, 尤其是应用同 Java EE 容器打交道的过程很复杂, 加上直接基于 Java EE API 研发企业应用的生产效率低下 ( 指研发效率, 不是运行效率 ), 并且非常容易出问题, 比如数据库连接泄漏 自 Spring 诞生以来, 这些问题已经成为了历史 Spring 针对 Java EE 容器服务及 Java EE API 提供了抽象和集成支持, 进而得到开发者的广泛拥护 为更好地针对 Java EE 容器服务及 Java EE API 提供抽象和集成支持,Spring 提供了由控制反转容器和 AOP( 面向切面编程 ) 组成的元框架 注意, 这一元框架能够被使用到任意场合, 而不只是在 Java EE 容器中 值得提醒的是,Spring 并不能取代 Java EE, 但借助 Spring 能降低实施 Java EE 的门槛, 并加快采纳 Java EE 的速度 最终,Spring 还能够确保企业应用的质量是一流的 因此,Java EE 是前提, 没有 Java EE 的发展,Spring 就不会出现 与此同时,Spring 的出现使得 Java EE 能够得到更好的发展, 比如 Java EE 5 6 便吸取了大量的开源经验和成果 ( 其中包括了 Spring 的部分特性 ), 并融入到 Java EE 规范中 现如今,Spring 已经进入到 3.0 时代 此时进入我们视野的不再局限于 Spring 3.0 框架本身, 而是涉及面极广的框架集合, 比如面向 Web 服务的 Spring Web Services 面向页面流的 Spring Web Flow 面向集成 Adobe BlazeDS(Flex) 的 Spring BlazeDS Integration 面向 ETL 领域的 Spring Batch 等 自从 Spring 诞生的那天起, 我们便一直在基于它交付各种类型的企业级 Java 应用, 并积累了大量的经验 教训 为全面跟进 Spring 3.0 时代, 并记录各种宝贵的经验教训, 我便萌发了此书的写作工作, 这是非常有意思的大挑战 虽然我们是围绕 Spring 3.0 展开全书写作工作的, 但有关 Java EE 6 的各种背景 实践及技巧都会被深入讨论到 因此, 我更希望 VIII

9 序 开发者能够把它看成是一本同时探讨 Java EE 6 和 Spring 3.0 的著作 当然,Spring 涉及的知识面非常广, 加上本人经验有限, 书中难免出现错误, 还望同行 批评指正, 并提出各种宝贵写作建议 罗时飞 E_mail:luoshifei@yahoo.cn 2009 年于广州 IX

10 前言 前言 本书将对 Spring 3.0 及 Java EE 6 进行全方位探索 到目前为止,Spring 3.0 主要提供了三方面的内容 :DI 容器 AOP 支持 Java EE 服务抽象及集成 我们的探索旅程正是围绕它们展开的 我们将各章的主体内容安排如下 第 1 章, 借助 Spring 3.0 实施 Java EE 6 第 2 章, 控制反转容器 控制反转容器和面向切面编程是 Spring 的核心内容, 它们构成了 Spring 本身的元框架 本章探讨 IoC, 下章探讨 AOP 第 3 章, 面向切面编程 AOP 的出现使得 强入侵性 一词可以寿终正寝了 而且, 可喜的是,Spring 内置了多种不同风格的 AOP 实现 第 4 章,DAO 层集成支持 本章内容将围绕 JDBC 事务抽象 集成测试展开论述 第 5 章,Hibernate JPA 集成 第 6 章,O/X Mapping 集成支持 Spring 3.0 新引入的重要技术, 其最初来自于 Spring Web Services 项目 第 7 章, 集成 Java EE 其他容器服务 主要阐述服务层相关集成技术, 比如 JNDI EJB 3.1 JMS JavaMail JMX 等 第 8 章,Web 层集成支持 第 9 章, 高级 Spring 3.0 特性 第 10 章, 附录 A, 安装及使用 SpringSource Tool Suite 第 11 章, 附录 B,Spring 3.0 内置的命名空间 第 12 章, 附录 C,Spring Web Services 第 13 章, 附录 D,Spring Web Flow 第 14 章, 附录 E,Spring BlazeDS Integration 第 15 章, 附录 F,Spring Roo 第 16 章, 附录 G, 相关资料 值得注意的是, 提供了全书配套代码 脚本的下载, 借助如下 SVN 命令能够将它们下载到 D:\springsource\ebooks 位置 X

11 前言 D:\springsource>svn co ebooks 随后, 开发者可以使用它们, 或在 STS 中导入各自的代码或脚本, 并完成各自运行和 调试工作 如果需要不定期更新它们, 则可借助如下 SVN 命令 D:\springsource\ebooks>svn update 任何问题, 可以同作者取得联系, 谢谢! XI

12 1 借助 Spring 3.0 实施 Java EE 6 Spring 在 Java EE 领域占据着不可或缺的位置 Java EE 6 将同 Spring 3 并肩战斗, 并将 企业级 Java 推向另一个高度 1.1 Java EE 6 编程模型讨论 走过 10 年后,Java EE 已经奔向了 6 字头时代, 这在企业计算领域是一种奇迹 然而, 一路走来, 参与 Java EE 的最广泛群体并没有感受到 Java EE 的研发优势, 尤其是它暴露的编程模型 这一最广泛群体正是开发人员, 你我都应该属于这一群体 现如今, 敏捷 一词到处可见, 我们就从它开始讨论 Java EE 6 是否已经足够敏捷 Java EE 6 够敏捷,No! 打开 Java EE 6 规范 ( 我们能够看到, 这次的改进非常多 这其中有如下几方面内容尤为突出 ( 从暴露给开发者的客户视图阐述, 即 Java EE 编程模型 ) 其一, 加强了模块化 可扩展能力, 比如 Servlet 3.0 引入了 Web Fragment 等 其二, 注解技术 (Annotation) 的使用到处可见 其三,Java EE API 进行了最广泛的升级, 几乎涉及到 Java EE 的各个方面, 并引入了 REST 架构 (Representational State Transfer, 表述性状态转移 ) 其四, 借助 JSR330 规范 (Dependency Injection for Java) JSR299 规范 (Contexts and Dependency Injection for Java,CDI) 加强了依赖注入能力 其五, 使用 JSR303 规范 (Bean Validation) 完成各种复杂校验工作, 这是一项非常实用的技术 从这一列表能够看出,Java EE 6 编程模型确实改进不少, 而且在很多细节上下了不少功夫 然而, 如下几方面的问题确实也需要开发者仔细考虑一下 其一, 完全借助 Annotation 描述整个企业应用的所有元数据是否合适? 毕竟, 这容易让开发者 只见树木, 不见森林 其二, 直接借助 Java EE API 是否能够很方便实施各种代码级的测试工作, 尤其是集成 1

13 测试? 其三, 直接采纳 Java EE API 研发企业应用的研发效率如何? 其四,Java EE 6 应用的可移植性能够得到保证吗? 其五, 依据以往经验, 我们开发的企业应用是否启用了大量开源技术 ( 包括第三方商业技术 ), 比如 Struts Hibernate Ehcache Quartz Apache DBCP AspectJ? 难道要我们编写集成开源技术的各种代码? 其六,OSGi 将会在不远的将来得到流行,Java EE 应用是否能够顺利移植到新的 OSGi 环境中? 虽然不少应用服务器厂商都拥抱了 OSGi, 但这只是它们内部行为, 它们并没有将 OSGi 行为暴露给开发者 其七, 其他未列思考, 留给开发者 在面对这些问题时,Java EE 6 编程模型不会给开发者 敏捷 的印象, 但这绝不会影响到 Java EE 在企业 软件厂商 开发者心中的位置, 因为这是不同层次的问题 为了做得更好, 我们需要提升敏捷能力 盘旋于具体与抽象之间 Java EE 6 作为大多数厂商一起制定的重要技术标准 企业运算平台, 为保证它的通用性, 其内容必然是较抽象的 然而, 在借助 Java EE 6 日常研发工作期间, 开发者必须解决各种具体问题, 比如日志管理 安全性管理 任务调度 应用的可移植性 快速实施测试工作 ( 包括 TDD 的实施 ) 等 我们注意到, 在企业应用领域流行多年的 Spring( 能够同时摆正具体与抽象的关系, 比如对 Java EE 进行了多种层面的抽象和集成 有关 Spring 是如何抽象和集成 Java EE 方面的内容, 本章并不想深入阐述, 开发者将会在本书的后续章节中一一阅读到它们 开发者暂时只需要记住一点,Spring 巧妙地解决了上节列举出的若干问题, 又没有降低 Java EE 6 的企业级能力 Spring 不仅继承了 Java EE 6 的优秀特质, 还加强了它们 在拥抱 Java EE 的前提下,Spring 尽可能抽象及集成各种主流技术, 并暴露统一 简单的客户视图给开发者, 即 Spring 编程模型 因此, 架构级 的 Spring 够敏捷! 我们通常将 Spring 看成是架构级的框架, 因为它能够支撑起整个企业应用, 应用的各个组成部分 都围绕它打转 2

14 1.2 挖掘 Spring 3.0 的架构价值 为保证 Spring 3.0 平台的品质,SpringSource 团队作出了许多关键决定, 并推出了堪称端到端的一整套产品 比如, 面向运行时的 Spring Framework 面向开发者的 SpringSource Tool Suite 面向 OSGi 环境的 Spring DM 面向安全性领域的 Spring Security 等 它们无不散发出 Spring 3.0 的架构价值 精耕细作于 Java EE 6 平台 过去的多年中,Spring 一直在同 Java EE 并肩战斗 Spring 3.0 将逐步 全面拥抱 Java EE 6 平台 Java EE 作为广泛使用的企业计算平台, 其企业运算能力不言而喻 一直以来,Java EE 暴露给开发者的客户视图不够理想, 比如研发效率低 实施测试工作较困难等 Spring 看到这些弊端, 并试图解决它们 结果是喜人的, 毕竟 Spring 已经得到大多数企业 软件厂商 开发者的拥护 Java EE 的每次重大升级,Spring 总是会积极跟进 同 Java EE 5 相比,Java EE 6 改进的内容非常多 比如, 将注解技术 (Annotation) 应用到 Java EE 的每个角落 支持 REST 架构 Web 层技术进行了全面升级 (Servlet 3.0 JSF 2.0) 实用和细粒度的依赖注入(JSR330 和 JSR299) Bean Validation(JSR303) EJB 3.1 的推出 JPA 2.0 等 全面跟进它们, 成了 Spring 3.0 的主旋律之一 除了跟进 Java EE 6 外,Spring 3.0 新增或加强的其他内容非常多, 比如要求 Java SE 5.0+ 引入 Spring 表达式语言 (Expression Language, 简称 SpEL) 借助注解定义受管 等 ) OXM( 即对象到 XML 的映射 ) 集成支持 嵌入式数据库支持等 这些特性在 Spring 3.0 中占据着重要位置 面向 Spring 的 SpringSource Tool Suite 集成开发工具 SpringSource Tool Suite( 简称 STS, 集成开发工具构建在 WTP 基础之上, 它是针对 Spring 开发者而来的 加上, 它是 SpringSource 公司官方打造的, 而且完全免费 STS 内置大量 Eclipse 插件, 比如 Spring IDE AspectJ 开发工具 ( 3

15 AJDT) M2Eclipse( Ant 集成 JUnit 测试 WTP/RCP 支持 OSGi 集成支持等 借助 STS, 开发者能够以可视化或图形化方式完成 Spring 配置文件的编写, 比如 Spring Web Flow 页面流程 Spring Batch 作业 在 STS 内部存在一 STS Dashboard( 仪表盘 ), 透过它, 开发者能够积极跟进 Spring 的最新发展趋势 Spring 教程 知识库等 可以看出,STS 为 Spring(OSGi) 应用的开发提供了一端到端的解决方案 附录 A 完整介绍了 STS 的安装及使用 本书也全面启用了 STS, 以支持 Spring 应用的研发 全面拥抱 OSGi 4.2 OSGi 是目前最具潜力, 能够将 Java EE 带入下一个黄金 10 年的重要技术 一直以来, 开发者及企业用户对 Java EE 的模块化和动态能力并不满意, 这些都是 Java EE 的软肋 尽管 Java EE 6 的模块化能力加强了不少, 比如 Servlet 3.0 引入的 Web Fragment 但还是不够彻底 相反,OSGi 的这些能力很强, 但其企业级能力稍差 因此, 业界在努力将 OSGi 引入到 Java EE 领域, 或者说在集成它们的各自优势 Spring 看到这一趋势, 并推出了 Spring DM 项目 ( 还参与 OSGi 4.2 规范的制定工作 与此同时, 各种 Spring 项目的正式发布版都遵循 OSGi 的约定, 各自的 JAR 包都是标准的 OSGi Bundle, 而且项目内部结构进行了全面的梳理, 使得各 Spring 项目更模块化 遵循 OSGi 规范, 以最大程度享用 OSGi 带来的巨大价值 比如, 我们熟知的 Spring Framework 和 Spring Security 全面拥抱了 OSGi 实际上, 所有的 Spring 项目都是如此 有关 OSGi 4.2 和 Spring DM 的更多资讯, 开发者可参考作者写作的 未来 10 年 :OSGi Spring DM 电子图书 开发者决定一切 在采纳 Spring 3.0 平台研发企业应用期间, 开发者会发现, 他们可以随心所欲 基于 Spring 的基代码能够同时运行在不同的企业环境中, 比如 Java SE Java EE OSGi, 而且在这些差异化的环境中表现出的行为是惊人的一致 Spring 从来就不会为开发者做决定, 而只是尽可能给出多种选择 比如, 为实现同 4

16 RDBMS 的交互, 开发者几乎可借助 Spring 敏捷使用到各种技术, 从 JDBC(JdbcTemplate), 到 O/R Mapping 技术 (JPA Hibernate ibatis JDO) 因此, 开发者能够决定一切,Spring 从来也是支持的, 因为 Spring 3.0 平台来自于开发者, 并服务于开发者 1.3 下载及构建 Spring 3.0 本节将围绕 Spring 3.0 的下载和构建工作展开论述 下载 Spring 3.0 正式发布版 现如今, 为下载各种 Spring 项目的官方发布版, 比如 Spring Framework Spring Security Spring Web Services, 开发者需要到 网址找 寻它们, 图 1-1 给出了对应的界面截图 图 1-1 下载 Spring 3 的操作界面当前, 最新的 Spring Framework 发布版是 RELEASE-A, 它对应 3 个不同的下载包 其中,spring-framework RELEASE-A.zip 仅仅持有 Spring 源码和 Spring JAR 包集合, 而 spring-framework release-a-with-docs.zip 新增了各种文档, 比如 API 规范 Spring Framework Reference Documentation, 而 spring-framework release-a-dependencies.zip 5

17 仅仅持有各种第三方 JAR 包 下载并解压它们后, 透过图 1-2 能够了解到, 开发者将需要 根据自身的情况, 而启用其中的若干 JAR 包 图 1-2 解压后的 Spring Framework 基于 SVN 库持续构建 Spring 源码 目前,SpringSource 官方主要采用 SVN 存储 Spring 项目的源码及文档 如果需要或者感兴趣, 开发者可以持续从 SVN 库 ( 获得最新的 Spring 项目快照, 并构建出最新版本的 Spring 为达到这一目的, 开发者可依据如下给出的操作步骤进行 其一, 借助 svn 命令行或 Subclipse, 从 SVN 库将 Spring 源码下载到开发者机器中 这里假定将 Spring 源码下载到 D:\springsource\workspace\spring-framework 位置 下面展示了 svn 命令行的使用 svn co spring-framework 其二, 于 D:\springsource\workspace\spring-framework\build-spring-framework 目录运行 ant 命令行, 即构建 Spring 源码 整个构建过程可能会持续 20 分钟左右, 时间主要取决于机器及网络状况 注意, 在运行它之前, 要设置好 Ant 相关内容, 尤其是要设置好 ANT_OPTS 环境变量, 使得宿主 Ant 的 JVM 有足够的内存支撑构建工作 下面给出了针对 Ant 设定的环境变量示例 ANT_HOME=D:\apache-ant

18 ANT_OPTS=-Xms256m -Xmx1024m -XX:MaxPermSize=256m 其三, 细心的开发者会发现,spring-framework 目录由多个 Eclipse 工程构成, 比如 AOP (org.springframework.aop) 事务集成(org.springframework.transaction) O/R Mapping 集成 (org.springframework.orm) 等 如果开发者需要在 Eclipse 中操控这一 Spring 项目快照, 则在将这些 Eclipse 工程导入之前, 需要在 Eclipse(STS) 中设置 IVY_CACHE 类路径变量, 其指向 D:/springsource/workspace/spring-framework/ivy-cache/repository 位置, 图 1-3 展示了这一设置 可以看出,Spring 源码是基于 Apache Ivy 组织的, 上述 ant 命令行执行期间, 会从远程 Ivy 库下载所需的各种第三方 JAR 包, 并存储到 ivy-cache 位置 图 1-3 设置 IVY_CACHE 类路径变量 总之, 开发者可以根据自身的不同情况, 来合理构建或编译直接从 SVN 版本库获得的 Spring 源码 1.4 小结 本章大致描述了 Java EE 6 的缺陷 借助 Spring 3.0 平台实施 Java EE 6 的重要意义 以 及 Spring 3.0 的下载和构建 从下章开始, 我们将逐步渗透到 Spring 3.0 平台的各个角落中 7

19 2 控制反转容器 DI 容器 ( 或称之控制反转容器,Inversion of Control,IoC), 负责管理宿主其中的 Spring 受管 Bean(POJO), 比如生命周期管理 协作者 事件分发 资源查找等 与此同时,Spring 内置了一流的 AOP 技术实现, 并同 AspectJ 进行了无缝集成 Spring 提供的 IoC 容器和 AOP 技术实现构成了 Spring 的核心内容, 它们是 Spring 元框架, 其中 Spring 内置的 Java EE 服务抽象和集成便是架构在这一元框架基础上的 本章内容将围绕 DI 容器展开, 下章将围绕 AOP 技术实现展开 2.1 DI 及 Spring DI 概述 类似于 EJB 容器管理 EJB 组件一样,Spring DI 容器负责管理宿主在其中的受管 Bean, 或者称之为受管 POJO Spring Bean 等 就目前来看,Spring 内置了两种基础 DI 容器, 即 BeanFactory 和 ApplicationContext, 它们间的关系见图 2-1 下面来分别研究这两种 DI 容器 图 2-1 两种基础 DI 容器 面向 Java ME/Java SE 的 BeanFactory BeanFactory 主要用在内存 CPU 资源受限场合, 比如 Applet 手持设备等 它内置了 最基础的 DI 功能, 比如配置框架 基础功能 开发者经常会使用到 Spring 内置的图 2-2 实 现, 即 XmlBeanFactory 图 2-2 XmlBeanFactory 在企业级计算环境, 开发者往往要使用 ApplicationContext, 而 BeanFactory 是不能够胜 8

20 任的 面向 Java EE 的 ApplicationContext 在 BeanFactory 基础上,ApplicationContext 提供了大量面向企业计算所需的特性集合, 比如消息资源的国际化 (i18n) 处理 简化同 Spring AOP 的集成 内置事件支持 针对 Web 应用提供了诸多便利 资源操控等 开发者会经常在各种场合使用到图 2-3 列举出的 DI 实现 比如, 面向 Web 应用的 XmlWebApplicationContext 容器 基于注解存储 DI 元数据的 AnnotationConfigApplicationContext 容器 适合于各种场景的 ClassPathXmlApplicationContext 和 FileSystemXmlApplicationContext 面向 Portal 应用的 XmlPortletApplicationContext 图 2-3 常见 ApplicationContext 实现除此之外,Spring 还内置了一些其它类型的 ApplicationContext 实现, 比如面向 JCA 资源适配器环境的 ResourceAdapterApplicationContext 值得注意的是,ApplicationContext 继承了 BeanFactory 的所有特性 无论如何, 本书的所有场合将围绕这两种类型的 DI 容器展开阐述 2.2 多种依赖注入方式 Spring DI 容器支持多种不同的依赖注入类型, 比如设值注入 构建器注入 属性注入 方法注入等 接下来, 我们将围绕 Eclipse iocdemo 项目阐述它们 设值注入 设值 (setter) 注入, 指通过调用 setter 方法, 从而建立起对象间的依赖关系 比如, BankSecurityServiceImpl 实现类定义了如下 setbanksecuritydao() 设值方法 public class BankSecurityServiceImpl implements IBankSecurityService { private IBankSecurityDao banksecuritydao; 9

21 public void setbanksecuritydao(ibanksecuritydao banksecuritydao) { this.banksecuritydao = banksecuritydao; }... 借助 Spring DI 容器, 开发者可将 IBankSecurityDao 对象提供给 BankSecurityServiceImpl 下面给出了 beanfactory.xml 中的全部内容, 它们承载了 Spring DI 元数据 <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xsi:schemalocation=" <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl"> <property name="banksecuritydao" ref="banksecuritydao"/> </bean> <bean id="banksecuritydao" class="com.openv.spring3x.ioc.banksecuritydaoimpl"> </bean> </beans> 从上述 XML 配置信息能够看出, 对象间的依赖关系可以外在化进行管理 下面展示了 BeanFactoryDemo 示例应用, 它加载了 beanfactory.xml DI 容器, 并通过 BeanFactory 暴露的 getbean() 方法访问到 IBankSecurityService 服务 // 从 classpath 路径上装载 XML 配置信息 Resource resource = new ClassPathResource("beanfactory.xml"); // 实例化 IoC 容器, 此时, 容器并未实例化 beanfactory.xml 所定义的各个受管 Bean BeanFactory factory = new XmlBeanFactory(resource); // 获得受管 Bean IBankSecurityService banksecurityservice = (IBankSecurityService) factory.getbean("banksecurityservice"); banksecurityservice.banktosecurity( ); banksecurityservice.securitytobank( );, 我们并没有手工构造任何对象,BankSecurityServiceImpl 和 BankSecurityDaoImpl 实例都是由 BeanFactory 构造的, 而且它们的依赖关系设置也是由这一 DI 容器完成的 我 们所做的事情, 只是告诉了 BeanFactory 这些对象间的协作关系而已 这正是 DI 的优势所 在, Don t call me, I ll call you! 10

22 懒惰的 BeanFactory 初始化 BeanFactory 实例后,IoC 容器并不会预先实例化配置文件中已声明的各个受管 POJO 只有应用在使用到对应的 POJO 时,Spring 才会实例化使用到的受管 Bean 对于 ApplicationContext 而言, 则不同 一旦构造完 ApplicationContext 对象,IoC 容器便会预先实例化配置文件中已声明的各个受管 POJO 这是同 BeanFactory 的区别之一 开发者可以去试图运行 BeanFactoryDemo 示例应用, 并仔细分析一下发生的一切 如果抱怨 beanfactory.xml XML 难于编写和维护, 则可借助 STS 内置的 Spring IDE 支持 附录 A 和附录 B 有详细的背景知识可供开发者参考 或者,AnnotationConfigApplicationContext 容器可干掉您的烦恼, 因为它可完全借助注解承载 DI 元数据 构建器注入 构建器注入, 指往构建器传入若干参数而完成的依赖注入, 传入的各个参数都是受管 Bean 依赖的对象, 这些对象间构成了协作关系 比如, 下面提供了一构建器 public BankSecurityServiceImpl(IBankSecurityDao banksecuritydao) { this.banksecuritydao = banksecuritydao; } 借助 <constructor-arg/> 子元素, 我们能够将 IBankSecurityDao 对象通过构建器注入到 BankSecurityServiceImpl 中, 配置示例如下 <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl"> <constructor-arg ref="banksecuritydao"/> </bean> 如果构建器持有多个参数, 则可同时使用多个 <constructor-arg/> 子元素, 如下示例配置 <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl"> <constructor-arg ref="banksecuritydao"/> <constructor-arg value="null"/> </bean> 或者, 开发者可依据协作者的类型或位置信息来给出 DI 元数据, 配置示例如下 <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl"> <constructor-arg index="0" ref="banksecuritydao"/> <constructor-arg type="java.util.properties" value="null"/> </bean> 11

23 开发者能够决定一切, 根据自身需要灵活使用构建器注入吧! 属性注入 在没有提供构建器和设置方法的前提下, 借助属性注入, 我们同样可以将协作者注入进 来 @EJB 等注解 的使用, 下面给出了使用示例, 摘自 private IBankSecurityDao banksecuritydao; 为激活这一注解, 我们需要在 DI 容器中配置 AutowiredAnnotationBeanPostProcessor 对 象, 具体示例如下 此时, 我们没有在 XML 配置信息中给出对象间的协作关系 <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl"> </bean> <bean id="banksecuritydao" class="com.openv.spring3x.ioc.banksecuritydaoimpl"> </bean> <bean class="org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor"/> ApplicationContextDemo 示例应用加载了这一 DI 容器, 具体如下 BeanPostProcessor 类型对象需宿主在 ApplicationContext 容器中, 因此它启用了 ClassPathXmlApplicationContext // 从 classpath 路径上装载 XML 配置信息 ApplicationContext applicationcontext = new ClassPathXmlApplicationContext("applicationcontext.xml"); // 获得受管 Bean IBankSecurityService banksecurityservice = applicationcontext.getbean(ibanksecurityservice.class); 方法注入 Spring 内置了两种方法注入策略, 即查找 (Lookup) 方法注入和方法替换 (Replacement) 注入 其中 : 查找方法注入, 指重载受管 Bean 的 ( 抽象 ) 方法 它会将查找到的其他受管 Bean( 通常为原型 ) 替换现有方法的返回结果, 从而起到方法注入的效果 在实施查找方法注入时, 12

24 开发者需要启用 <bean/> 中的 <lookup-method/> 子元素 方法替换注入, 指使用其他受管 Bean 实现的方法替换目标受管 Bean 中的现有方法 在实施方法替换注入时, 开发者需要启用 <bean/> 中的 <replaced-method/> 子元素 借助方法注入, 能够 优雅 解决应用中单例对原型的引用, 从而避免应用同 Spring 的深度耦合 作者认为, 方法注入的使用过于复杂, 而且不实用 我们完全可以通过改进应用的架构设计, 以避免它们的使用 更何况, 即使应用同 Spring 耦合也不是太大的问题, 因为它是事实上的开发标准 有关方法注入的具体细节这里就不介绍了, 如果您感兴趣, 则可以参考本书附录列出的参考资料 2.3 借助 Autowiring 策略智能注入协作者 所谓 Autowiring 策略, 即自动管理受管 Bean 间的关系, 开发者不用手工一一指定它们 间的协作关系, 很显然, 这大大降低了 XML 配置文件的维护量 Spring 内置了多种不同的 Autowiring 策略, 本节内容将一一介绍它们 <bean/> 元素的 autowire 属性 开发者借助 <ref/> 元素或 ref 属性能够显式指定当前受管 Bean 的协作者, 比如下面给出 了配置示例 <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl"> <property name="banksecuritydao"> <ref bean="banksecuritydao"/> </property> </bean> 试想, 如果待配置的协作者数量惊人, 而且 Spring XML 配置文件非常多, 则维护它们 是非常痛苦的事情 通过启用 <bean/> 元素内置的 autowire 属性,DI 容器能够自动完成协作 者的依赖注入 下面一一列举出了 autowire 属性的取值集合 表 2-1 autowire 属性取值集合 autowire 属性取值 byname bytype 详细解释通过属性名完成 autowire 操作 如果某受管 Bean a 含有 b 属性, 则 IoC 容器会去所有受管 Bean 中寻找名字 (id) 为 b 的受管 Bean, 并注入到受管 Bean a 的 b 属性中 如果未找到, 则不会设置 b 属性的取值通过判断属性类型完成 autowire 操作 如果某受管 Bean a 中 b 属性的类型 (type) 为 13

25 autowire 属性取值 constructor no default 详细解释 IBankSecurityDao, 则 IoC 容器会去所有受管 Bean 中寻找类型为 IBankSecurityDao 的受管 Bean, 并注入到受管 Bean a 的 b 属性中 如果找到多个, 则会抛出异常 如果未找到, 则不会设置 b 属性的取值同 bytype, 但作用于构建器不启用 autowire 特性, 这是 Spring 受管 Bean 的默认行为同 <beans/> 级别设定的 autowiring 策略 比如,BankSecurityServiceImpl 中定义了如下 setter 方法 public void setbanksecuritydao(ibanksecuritydao banksecuritydao) { this.banksecuritydao = banksecuritydao; } 启用如下 bytype 策略, 我们能够将 BankSecurityDaoImpl 受管 Bean 自动注入进来, 即为 BankSecurityServiceImpl 指定协作者 <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl" autowire="bytype"/> <bean id="banksecuritydao" class="com.openv.spring3x.ioc.banksecuritydaoimpl"/> 或者, 如果 BankSecurityServiceImpl 内置了如下构建器, 则启动 constructor 策略能 够完成协作者的智能注入 public BankSecurityServiceImpl(IBankSecurityDao banksecuritydao) { this.banksecuritydao = banksecuritydao; } 最后, 为启用 byname 策略, 协作者的 id 或名字必须同属性名一致 下面给出的配 置示例将不能成功将协作者注入到 BankSecurityServiceImpl 受管 Bean( 假定它仍然定义了 上述 setter 方法 ) 中, 因为它暴露的属性名是 banksecuritydao, 而 BankSecurityDaoImpl 受 管 Bean 的名字为 banksecuritydaoimpl <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl" autowire="byname"/> <bean id="banksecuritydaoimpl" class="com.openv.spring3x.ioc.banksecuritydaoimpl"/> 注解加强协作者管理 开发者是否注意到, 启用 autowire 属性期间, 我们并不能够确定协作者是否找到 通常, 14

26 协作者没有找到时,NPE 异常可能会抛出, 但这可能已经是运行期行为 我们是否能够在启动应用期间就将这类问题找出来, 并告知开发者, 从而尽可能避免生产问题的发生 注解, 我们能够加强协作者管理 不过, 启用这一注解时, 需要单独配置如下受管 Bean 定义, 并启用 ApplicationContext 容器 <bean class="org.springframework.beans.factory.annotation.requiredannotationbeanpostprocessor"/> 或者, 激活如下配置 <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xmlns:context=" xsi:schemalocation=" <context:annotation-config/> </beans> 注解的使用 public void setbanksecuritydao(ibanksecuritydao banksecuritydao) { this.banksecuritydao = banksecuritydao; } 事实上,@Required 注解只能够确保其作用的方法是否被调用到, 它也不能确保协作者 是否成功注入 即使将 <null/> 取值提供给其作用的方法, 则也是没问题的, 注解 下面给出了配置示例, 它将 <null/>, 即 null 值给了 banksecuritydao 属性 <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl"> <property name="banksecuritydao"> <null/> </property> </bean> 正常情况下, 当应用启动时, 注解作用的方法被调用到, 则说明协作者 确实找到了 ; 注解作用的方法没被调用到, 则应用是不能够正常启动的, 即 会有如下类似异常的抛出 Caused by: org.springframework.beans.factory.beaninitializationexception: Property 'banksecuritydao' is required for bean 'banksecurityservice' 15

27 at org.springframework.beans.factory.annotation.requiredannotationbeanpostprocessor.postprocesspropertyvalues(requiredannotationbeanpostprocessor.java:149) 注解的另一 Autowiring 策略 之前介绍属性注入时, 注解的使用了 注解, 开发者需要在 DI 容器中单独配置如下受管 Bean <bean class="org.springframework.beans.factory.annotation.autowiredannotationbeanpostprocessor"/> 或者, 激活如下配置 注解是 JSR330(javax.inject) 引入的, 注解一样, 都可以作用 到构建器 属性 方法上 private IBankSecurityDao banksecuritydao; 默认时, 注解作用到构建器, 或属性, 或方法上, 则协作者 必须存在, 否则应用不能够正常启动 注解的功效 注解的能力, 注解允许开发者不启用这 一能力 下面给出了代码示例 默认时,required 属性取值为 true, 一旦设置为 false 后, 即 使没有为 banksecuritydao 属性提供协作者, 应用也能够 正常 private IBankSecurityDao banksecuritydao; 借助 primary 注解细粒度控制 Autowiring 策略 采纳各种 Autowiring 策略时, 当 DI 容器中多个不同受管 Bean 都符合条件, 并能够作为其他受管 Bean 的协作者时, 到底该将哪个受管 Bean 作为真正的协作者呢? 下面给出了配置示例 abcbanksecuritydao 和 cmbbanksecuritydao 受管 Bean 都能够作为协作者注入到 BankSecurityServiceImpl 受管 Bean 中 由于 abcbanksecuritydao 受管 Bean 启用了 primary 属性, 而且其取值为 true, 因此这一受管 Bean 会被作为 banksecurityservice 受管 Bean 的协作者 16

28 <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl" autowire="bytype"/> <bean id="abcbanksecuritydao" class="com.openv.spring3x.ioc.banksecuritydaoimpl" primary="true"/> <bean id="cmbbanksecuritydao" class="com.openv.spring3x.ioc.banksecuritydaoimpl"/> 当多个候选受管 Bean 都符合协作者条件时, 只有启用了 primary 属性, 并且其取值为 true 的受管 Bean 才有资格注入到其他受管 Bean 中, 比如 banksecurityservice 受管 Bean 注意,primary 默认取值为 false 另一方面, 当多个候选受管 Bean 都符合协作者条件时, 而且大家都没有启用 primary 属性, 则不能够正常启动应用, 相应的异常类似如下 Caused by: org.springframework.beans.factory.nosuchbeandefinitionexception: No unique bean of type [com.openv.spring3x.ioc.ibanksecuritydao] is defined: expected single matching bean but found 2: [abcbanksecuritydao, cmbbanksecuritydao] 值得注意的是, 既然可以借助 primary 属性让某个受管 Bean 作为协作者, 我们也可以 借助 autowire-candidate 属性让某个受管 Bean 压根不参与到 Autowiring 策略中, 配置示例如 下 此时,cmbBankSecurityDao 受管 Bean 不会作为其它任何受管 Bean 的协作者 能够看 出, 当 autowire-candidate 属性取值为 false 时, 当前受管 Bean 不会参与到 Autowiring 策略 中, 其默认取值为 true <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl" autowire="bytype"/> <bean id="abcbanksecuritydao" class="com.openv.spring3x.ioc.banksecuritydaoimpl" primary="false"/> <bean id="cmbbanksecuritydao" class="com.openv.spring3x.ioc.banksecuritydaoimpl" autowire-candidate="false"/> 位于 org.springframework.beans.factory.annotation 注解是我们这里需要重 点关注的另一对象 注解的使用, 能够有序地将不同候选受管 Bean 注入 到不同地方 比如, 下面给出了代码示例 这里定义了 3 个不同的 private private IBankSecurityDao cmbbanksecuritydao; 17

29 @Autowired private IBankSecurityDao banksecuritydao; 现要求 3 个不同的 IBankSecurityDao 受管 Bean 分别注入进来, 下面给出了配置示例 开发者能够看出,<qualifier/> 注解的默契配合完美地完成了这一任务 对 于取值为 cmb 的 <qualifier/> 元素而言, 则其所在的 cmbbanksecuritydao 受管 Bean 将注入到 上述 cmbbanksecuritydao 变量中, 注解的取值也为 cmb 类似地, 开发者可以依此类推 <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl"> </bean> <bean id="banksecuritydao" class="com.openv.spring3x.ioc.banksecuritydaoimpl" primary="true"> </bean> <bean id="cmbbanksecuritydao" class="com.openv.spring3x.ioc.banksecuritydaoimpl"> <qualifier value="cmb"/> </bean> <bean id="abcbanksecuritydao" class="com.openv.spring3x.ioc.banksecuritydaoimpl"> <qualifier value="abc"/> 注解的定义如下 它能够作用到许多地方, 比如属性 方法 参数 类 ElementType.METHOD, ElementType.PARAMETER, Qualifier { String value() default ""; } private void init(@qualifier("abc") IBankSecurityDao IBankSecurityDao cmbbanksecuritydao, IBankSecurityDao banksecuritydao){ this.abcbanksecuritydao = abcbanksecuritydao; this.cmbbanksecuritydao = cmbbanksecuritydao; 18

30 } this.banksecuritydao = banksecuritydao; 总之, 开发者需要依据自身不同情况, 而灵活启用不同的 Autowiring 策略 2.4 资源操控 2.5 将 DI 容器宿主到 Web 容器中 2.6 外在化配置应用参数 2.7 Spring 受管 Bean 的作用范围 2.8 Bean Validation 集成支持 2.9 回调接口集合及触发顺序 19

31 2.10 <util/> 命名空间 2.11 值得重视的若干 DI 特性 本节内容将针对 Spring 内置的一些 DI 特性进行阐述 depends-on 属性 别名 (Alias) 如同叫别人小名一样, 我们也可以对受管 Bean 取 小名 默认时, 我们需要在定义 <bean/> 元素时指定 id 或 name 属性 由于 id 属性是 XML 标准行为, 因此一般建议开发者通过给定 id 属性, 以唯一标识受管 Bean 通常, 如果 id 和 name 属性都没有指定,Spring 会为当前受管 Bean 生成一默认 id 值, 即类的全限定名 (FQN) 某些时候, 我们需要借助 <alias/> 元素, 给特定受管 Bean 取别名, 比如为了达到同具体 <bean/> 解耦的目的 下面给出了配置示例, 以后无论是通过 banksecuritydao, 还是通过 bsd 别名查找到的受管 Bean 始终是同一个 <bean id="banksecuritydao" class="com.openv.spring3x.ioc.banksecuritydaoimpl"/> <alias name="banksecuritydao" alias="bsd"/> 在 <alias/> 元素中,name 属性用于指定被取别名的目标受管 Bean 的 id 或 name, 而 alias 属性用于指定别名 工厂 Bean 和工厂方法 20

32 <p/> 命名空间 开发者只需往 Spring DI 配置文件中新增如下粗体内容,<p/> 命名空间便可启用了 <?xml version="1.0" encoding="utf-8"?> <beans xmlns=" xmlns:xsi=" xmlns:p=" xsi:schemalocation=" Integer 假定存在一 <bean/> 定义如下 其中,bankSecurityDao 为复杂数据类型, 而 level 只是一 <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl"> <property name="banksecuritydao" ref="banksecuritydao"/> <property name="level" value="10"/> </bean> 借助 <p/> 命名空间, 我们可给出如下等效配置 其中, p:*-ref 用于引用其它受管 Bean, * 表示属性名, 比如 banksecuritydao; 对于简单属性 ( 数据类型 ), 开发者直接启用属性名 即可, 即 p:* <bean id="banksecurityservice" class="com.openv.spring3x.ioc.banksecurityserviceimpl" p:banksecuritydao-ref="banksecuritydao" p:level="10"/> <p/> 命名空间的使用使得配置文件变得简洁 而且, 这一命名较特殊, 即它不存在对应 的 XSD(XML Schema) 抽象和子 Bean 2.12 基于注解 (Annotation) 方式配置 DI 容器 21

33 2.13 Spring 表达式语言 (SpEL) 支持 核心接口及类 基于 API 方式使用 基于 XML 方式使用 基于 Annotation 注解使用 SpEL 语法速查 2.14 回调接口集合及其触发顺序 BeanNameAware 回调接口 22

34 BeanClassLoaderAware 回调接口 BeanFactoryAware 回调接口 ResourceLoaderAware 回调接口 ApplicationEventPublisherAware 回调接口 MessageSourceAware 回调接口 ApplicationContextAware 回调接口 注解 InitializingBean 回调接口 23

35 <bean/> 元素的 init-method 属性 注解 DisposableBean 回调接口 <bean/> 元素的 destroy-method 属性 2.15 小结 Spring 内置的 DI 容器非常强大, 易用性也不错 本章对这一业界使用时间最长 功能 最强的控制反转容器进行了全方位研究 各种企业计算环境广泛使用并部署了它 而它的搭 档 -AOP 技术实现, 将在下章现身 24

36 3 面向切面编程 借助面向对象 (OO) 技术能够解决对象和服务的构造 抽象 复用, 然而 OO 技术不能够将企业级服务优雅地引入进来, 但是本章介绍的 AOP 能够全面担负这种职责 Spring 内置的 AOP 技术实现和 AspectJ 集成支持为各种企业应用的研发提供了一流的解决方案, 几乎可以认为, 在未来的 10 年中, 很难有其它 AOP 解决方案超越它 好了, 我们还是从实践 AOP 开始 3.1 AOP 及 Spring AOP 基础 细说 AOP Spring AOP 基础概念 3.2 AspectJ 6 初探 3.3 老式 Spring AOP 25

37 3.4 的 Spring AOP 3.5 基于 <aop:config/> 元素的 AOP 巧用 <aop:include/> 元素 3.6 在 AspectJ 6 注解 不难发现,org.springframework.aspects RELEASE-A.jar 包内置了不少 AspectJ 切面, 比如 AnnotationBeanConfigurerAspect( 注解配合使用能实现领域对象的 DI 操作 ) AnnotationTransactionAspect( 注解配合使用能智能完成事务操作 ) 等, 具体细节可参考这一 JAR 包内置的 META-INF/aop.xml 文件 本节将通过启用 AspectJ 装载期织入 (LTW) 阐述 AnnotationBeanConfigurerAspect 注解的使用, 其它切面将在本书相关章节介绍 借助 AnnotationBeanConfigurerAspect 切面, 注解的使用, 我们能够实现领域对象的依赖注入操作 领域对象并不是由 Spring 容器创建的, 它们可能由 new 关键字构造而成, 也可能由 O/R Mapping 工具创建, 或通过其它途径获得 本节内容将围绕 Eclipse configurabledemo 项目进行 显式使用 AnnotationBeanConfigurerAspect 切面 为展示 AnnotationBeanConfigurerAspect 切面的使用, 我们准备了如下领域对象 ( 证券 帐号 ), 注解 IBankSecurityService 服务负责银行和券商间资金的 26

38 转入转出操作 import public class SecurityAccount { private IBankSecurityService banksecurityservice; public void setbanksecurityservice(ibanksecurityservice banksecurityservice) { this.banksecurityservice = banksecurityservice; } public void tobank(double money){ this.banksecurityservice.securitytobank(money); } public void tosecurity(double money){ this.banksecurityservice.banktosecurity(money); }... 接下来, 我们将 AnnotationTransactionAspect 切面配置在 config.xml 中, 相关内容摘录 如下 由于领域对象的特殊性, 这里将它的作用范围置为原型 <bean class="org.springframework.beans.factory.aspectj. AnnotationBeanConfigurerAspect" factory-method="aspectof"/> <bean scope="prototype" class="com.openv.spring3x.aop.securityaccount" p:banksecurityservice-ref="banksecurityservice"/> <bean id="banksecurityservice" class="com.openv.spring3x.aop.banksecurityserviceimpl"/> ConfigurableDemo 应用激活了 config.xml, 示例代码如下 它手工创建了证券帐号, 并 调用了相关的转帐操作 (tobank() 和 tosecurity()) // 启用 Spring DI, 并完成 AspectJ 6 切面的配置工作, 比如将 IoC 容器暴露给切面 new ClassPathXmlApplicationContext("config.xml"); log.info(" 即将构建领域对象 "); // 很多时候,Hibernate/JPA/ 应用代码会负责创建领域对象 SecurityAccount securityaccount = new SecurityAccount(); log.info("aspectj 6 已经完成了领域对象的配置工作 "); // 没有显式设置 securityaccount 领域对象的协作者, 但 IBankSecurityService 服务确实不再是 null securityaccount.tobank(10000); securityaccount.tosecurity(10000); 27

39 运行上述应用前, 开发者需要设置如下 JVM 参数, 从而激活 AspectJ 6 的 LTW 行为 -javaagent:../../lib/com.springsource.org.aspectj.weaver release.jar 图 3-1 展示了 STS 中是如何设置这一 JVM 参数的 图 3-1 激活 AspectJ 6 的 LTW 行为应用被执行后, 控制台将输出如下类似日志 我们可以推测出,AspectJ 从 config.xml 容器中找到 SecurityAccount 对象, 并用它动态替换掉代码中手工创建的 SecurityAccount 对象, 从而避免了 NPE 异常的抛出, 因为 IBankSecurityService 服务没有机会出现在手工创建的 SecurityAccount 对象中 [INFO] :57:32,781 com.openv.spring3x.aop.configurabledemo - 即将构建领域对象 [INFO] :57:32,828 com.openv.spring3x.aop.configurabledemo - AspectJ 6 已经完成了领域对象的配置工作 [INFO] :57:32,828 com.openv.spring3x.aop.banksecurityserviceimpl - 即将从券商转出 元到银行 [INFO] :57:32,828 com.openv.spring3x.aop.banksecurityserviceimpl - 即将从银行转入 元到券商 注解 Spring 注解只能够作用于类, 通常是领域对象本身, 而不能将它运用到方法或其它地方 被应用了这一注解的类将参与到 AspectJ LTW 行为中, 并完成协作者的智能注入工作 注解暴露的所有成员, 通过它们能够自定义若干行为, 比如领域对象对应受管 Bean 的查找策略 协作者的注入策略等 /** * 领域对象对应受管 Bean 的名字, 映射到 Spring DI 容器 */ 28

40 String value() default ""; /** * 启用不同 autowiring 策略以注入协作者 */ Autowire autowire() default Autowire.NO; /** * 是否启用依赖性检查, 即检查协作者 */ boolean dependencycheck() default false; /** * 领域对象构建前是否注入协作者 */ boolean preconstruction() default false; 比如,value 属性用来指定领域对象对应受管 Bean 的名字, 下面给出了配置示例 默认 时,AnnotationBeanConfigurerAspect 切面会根据领域对象的全限定名 (FQN) 查找到对应的 受管 Bean 名字, 比如 "com.openv.spring3x.aop.securityaccount" 如果受管 Bean 的定义中未 出现 id 或 name 属性, 则类的 FQN 便被当作领域对象对应受管 Bean 或者, 另外,autowire 属性用来指定领域对象注入协作者的 Autowiring 策略 在展示这一属性的使用前, 我们得先调整 config.xml 配置文件, 将 SecurityAccount 对 IBankSecurityService 服务的静态引用去掉,configautowiring.xml 持有调整后的配置, 相关内容摘录如下 <bean scope="prototype" class="com.openv.spring3x.aop.securityaccount"/> <bean class="com.openv.spring3x.aop.banksecurityserviceimpl"/> 如果不启用 Autowiring 策略, 则 SecurityAccount 的 IBankSecurityService 服务将永远为 空, 或者, 开发者可在定义 SecurityAccount 时启用 <bean/> 元素暴露的 autowire 属性, 以达 到同样的效果, 配置示例如下 <bean scope="prototype" class="com.openv.spring3x.aop.securityaccount" autowire="bytype"/> 29

41 注解暴露的 dependencycheck 属性 它将配合 autowire 属性使 用, dependencycheck=true) 最后, 看看 preconstruction 属性 它能够控制调用领域对象的构建器前是否注入协作者, 比如下面展示了这一属性的使用,preConstruction 属性取值为 false, 即 SecurityAccount() 构建器会被先触发, 随后才是 setbanksecurityservice() 方法, preconstruction=false) public class SecurityAccount { private IBankSecurityService banksecurityservice; public SecurityAccount() { Assert.notNull(this.bankSecurityService); } public void setbanksecurityservice(ibanksecurityservice banksecurityservice) { this.banksecurityservice = banksecurityservice; } 通过 META-INF/aop.xml( 或 aop-ajc.xml) 控制启用的切面集合 当前, 存储 AnnotationBeanConfigurerAspect 切面的 JAR 包中还持有其它 AspectJ 切面 为控制启用的切面集合, 开发者需要使用 META-INF/aop.xml 或 aop-ajc.xml 配置文件 下 面给出了一配置示例 <!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" " <aspectj> <weaver options="-showweaveinfo -XmessageHandlerClass:org.springframework.aop.aspectj.AspectJWeaverMessageHandler"> <include within="com..*"/> </weaver> <aspects> <include within="org.springframework.beans.factory.aspectj.annotationbeanconfigureraspect"/> </aspects> </aspectj> AspectJWeaverMessageHandler 监听了 AspectJ 6 产生的各种织入事件, 并输出到控制台 30

42 上 <aspects/> 元素中的 <include/> 子元素指定了待启用的切面 通过 aspectj.dtd, 开发者能 够获得这一 DTD 的完整介绍 <context:spring-configured/> 元素 借助 <context:spring-configured/> 元素能起到隐式使用 AnnotationBeanConfigurerAspect 切面的目的, 下面给出了配置示例 (springconfigured.xml) <context:spring-configured/> <bean scope="prototype" autowire="bytype" class="com.openv.spring3x.aop.securityaccount"/> <bean class="com.openv.spring3x.aop.banksecurityserviceimpl"/> 同样地, 运行 ConfigurableDemo 时需要指定上述一致的 -javaagent JVM 参数 初探 <context:load-time-weaver/> 元素 除了 <context:spring-configured/> 元素能够隐式使用 AnnotationBeanConfigurerAspect 切 面外,<context:load-time-weaver/> 元素也能 比如,ltw.xml 中配置了如下内容 <context:load-time-weaver/> <bean scope="prototype" autowire="bytype" class="com.openv.spring3x.aop.securityaccount"/> <bean class="com.openv.spring3x.aop.banksecurityserviceimpl"/> 此时, 开发者需要指定如下 JVM 参数, 否则 AspectJ LTW 行为无法激活 -javaagent:../../lib/org.springframework.instrument release-a.jar 事实上,<context:load-time-weaver/> 只是兼容 <context:spring-configured/>, 它的功能非 常强大, 我们将在相关章节深入阐述 <context:load-time-weaver/> 的机理及使用 3.7 小结 借助 AOP 及 Spring AOP 技术, 我们能够控制 入侵性, 并且将各种企业级服务优雅地引入到企业应用的研发工作中 当 Spring AOP 技术实现不能够完全满足企业应用的需求时, 开发者可启用 AspectJ 集成支持, 从而满足各种苛刻的企业计算需求 本章内容对这些 31

43 内容进行了全面而深入的探讨 本书后续内容将逐步进入到 Spring 内置的 Java EE 服务抽象及集成中, 先从 DAO 层集 成支持开始吧! 32

44 4 DAO 层集成支持 4.1 RDBMS 持久化操作抽象支持 4.2 JDBC 集成支持 JDBC 最佳实践 4.3 事务集成支持 4.4 集成测试支持 4.5 在 AspectJ 6 注解 4.6 小结 33

45 5 Hibernate JPA 集成 5.1 Hibernate 集成支持 5.2 JPA 集成支持 5.3 智能处理 Java EE 容器中的装载期织入 (LTW) 图 5-1 LoadTimeWeaver 继承链 34

46 5.4 小结 35

47 6 O/X Mapping 集成支持 现如今,O/X Mapping 的使用非常频繁, 即对象与 XML 间的映射工作 Spring 3.0 内置 的 O/X Mapping 集成支持是基于 Spring Web Services 项目开发而成的, 它们对主流的 O/X Mapping 提供者进行了封装 集成 接下来仔细研究它们的使用及内部构造 6.1 O/X Mapping 集成支持 所谓 O/X Mapping, 即 Java Object 与 XML 文档间的映射工作, 这是类似于 O/R Mapping 的东东, 只不过 Hibernate 类似产品的目标是关系数据库, 而 O/X Mapping 提供者的目标是 XML 文档 在 O/X Mapping 中, 主要存在两种对象,Marshaller 和 Unmarshaller, 前者负责完成对象到 XML 的转换映射工作, 而后者完成 XML 到对象的转换映射工作, 它们共同完成各种复杂 O/X Mapping 工作 就目前而言, 主要存在 XMLBeans( JAXB 2.0 Castor ( JiBX( XStream( 等 O/X Mapping 提供者 在 Web 服务及 XML 使用较频繁的场合经常会使用到它们 其中, JAXB 2.0 是 JCP 规范 (JSR222); 而 XMLBeans 功能非常强大 使用面也广, 对 XML Schema 提供了最全面的支持 开发者要根据自身的需要灵活选用它们, 毕竟不同 O/X Mapping 提供者的定位 易用程度不一样 Spring 于 org.springframework.oxm 包内置了 O/X Mapping 集成支持, 图 6-1 展示了其中的主要内容 这一集成支持对主流 O/X Mapping 提供者进行了统一的抽象 封装工作 图 6-1 Marshaller 及 Unmarshaller 继承链 在这一继承链中,Marshaller 和 Unmarshaller 是最为基础的两个接口, 下面大致研究一 36

48 下它们的构成情况 Marshaller 及 Unmarshaller 接口 Marshaller 接口的定义摘录如下 通过调用其 marshal() 方法, 能够完成对象到 XML 的 转换和映射操作 package org.springframework.oxm; import java.io.ioexception; import javax.xml.transform.result; public interface Marshaller { boolean supports(class<?> clazz); void marshal(object graph, Result result) throws IOException, XmlMappingException; } Unmarshaller 接口的定义摘录如下 通过调用其 unmarshal() 方法, 能够完成 XML 到对 象的转换和映射操作 package org.springframework.oxm; import java.io.ioexception; import javax.xml.transform.source; public interface Unmarshaller { boolean supports(class<?> clazz); Object unmarshal(source source) throws IOException, XmlMappingException; } 物理上,Spring 内置了 5 种不同的 Marshaller 和 Unmarshaller 实现类, 具体参考图 6-1 接下来, 我们将结合 Eclipse oxmdemo 项目阐述它们的具体使用 6.2 实践 XMLBeans 集成支持 本节以 XMLBeans 提供者为例阐述 O/X Mapping 集成支持的使用 有关 XMLBeans 的 37

49 背景知识, 开发者可参考其官方网站 借助 Ant 生成 XMLBeans JAR 在使用 XMLBeans 期间, 开发者需要准备好一 XML Schema 文件 (XSD), 这是类似 SQL DDL 的元数据语言 下面摘录了 stock.xsd XSD 文档的内容 XSD 对 XML 文档的语法 和语义进行了建模 <?xml version="1.0" encoding="utf-8"?> <schema xmlns=" elementformdefault="qualified" attributeformdefault="qualified" targetnamespace=" xmlns:tns=" <element name="stockinfo"> <complextype> <sequence> <element name="name" type="string" minoccurs="1"/> <element name="code" type="int" minoccurs="1"/> <element name="desc" type="string" /> <element name="price" type="double" minoccurs="1"/> </sequence> </complextype> </element> </schema> 借助如下类似 Ant build.xml 配置文件能够生成上述 XSD 对应的 XMLBeans JAR 包 <?xml version="1.0" encoding="gbk"?> <project name="xmlbeanstools" basedir="."> <path id="all-libs"> <fileset dir="../../lib" includes="*.jar"/> </path> <target name="stock"> <taskdef name="xmlbean" classname="org.apache.xmlbeans.impl.tool.xmlbean" classpathref="all-libs"/> <xmlbean schema="xmlbeans" srcgendir="gensrc/xmlbeanstools/" destfile="lib/stock.jar" classpathref="all-libs"/> </target> </project> 好了,stock.jar 被成功创建的同时, 对应的源码也被保留在 gensrc 目录的 xmlbeanstools 38

50 子目录中, 有兴趣的开发者可以去研究一下 XmlBeansMarshaller 实现类 XmlBeansMarshaller 简化了 XMLBeans 的使用, 下面摘录了 xmlbeans.xml 配置文件中定义的 XmlBeansMarshaller 及其协作者 XmlOptionsFactoryBean 用于快速创建 XmlOptions 对象, 并自定义各种 O/X Mapping 行为 或者, 开发者可以不用提供 XmlOptionsFactoryBean, 即使用默认配置 <bean id="xmlbeansmarshaller" class="org.springframework.oxm.xmlbeans.xmlbeansmarshaller"> <property name="xmloptions" ref="xmloptionsfactorybean"/> </bean> <bean id="xmloptionsfactorybean" class="org.springframework.oxm.xmlbeans.xmloptionsfactorybean"> <property name="options"> <props> <prop key="save_pretty_print">true</prop> <prop key="character_encoding">utf-8</prop> </props> </property> </bean> 下面摘录了 OxmXmlbeansDemo 示例应用, 其展示了 XmlBeansMarshaller 的使用 其中, 上述 XMLBeans JAR 包持有的 StockInfoDocument 和 StockInfo 接口反映了 stock.xsd 中定义 的 <element name="stockinfo"/> 元素 通过操作它们, 应用便在内存中创建了吻合这一 XML Schema 定义的 XML 文档, 如果需要, 可以将这一文档保存到硬盘中, 比如 stock.xml 中 StockInfoDocument stockinfodocument = StockInfoDocument.Factory.newInstance(); StockInfoDocument.StockInfo stockinfo = stockinfodocument.addnewstockinfo(); stockinfo.setname("owcy"); stockinfo.setdesc("owcy Inc."); stockinfo.setcode(168000); stockinfo.setprice(100.0); XMLOutputFactory outputfactory = XMLOutputFactory.newInstance(); FileWriter writer = new FileWriter("stock.xml"); XMLStreamWriter streamwriter = outputfactory.createxmlstreamwriter(writer); Result result = StaxUtils.createStaxResult(streamWriter); marshaller.marshal(stockinfodocument, result); writer.flush(); 39

51 借助 Marshaller 的 marshal() 方法, 我们能够将 Java 对象转换并映射成 XML 文档, 并保存到 stock.xml 中 此时, 开发者不用再借助各种底层 XML API 处理 XML 文档本身了, 这正是 O/X Mapping 的优势 这类似于使用 Hibernate 期间, 借助 Hibernate Session, 开发者能够将 Java 对象转换成 RDBMS 记录, 而不用借助 SQL DML 语句与数据库进行交互 <oxm:xmlbeans-marshaller/> 元素 如果借助 Spring 内置的 <oxm/> 命名空间, 则上述 xmlbeans.xml 配置文件可以得到简化, 比如下面给出了配置示例, 它将代替 XmlBeansMarshaller 的定义, 即开发者不用再显式定 义 XmlBeansMarshaller 对象了 <oxm:xmlbeans-marshaller id="xmlbeansmarshaller" options="xmloptionsfactorybean"/> 类似地, 针对 JAXB 2.0 和 JiBX 提供者, 开发者可启用 <oxm:jaxb2-marshaller/> <oxm:jibx-marshaller/> 元素 有关 O/X Mapping 集成支持的更多使用场合 通常,Web 服务离不开处理各类 XML 工件, 比如 SOAP 消息 Spring Web Services 到处深入使 用到 O/X Mapping 集成支持 本书附录 C 详细阐述了 O/X Mapping 集成支持在 Web 服务中的应用 6.3 小结 Spring 内置的 O/X Mapping 集成支持非常不错, 它不仅有效屏蔽了各 O/X Mapping 实现的差异性, 而且还提供了统一 高效的编程模型供开发者使用 开发者可以在各种应用中使用它 除此之外, 在 Spring 内部, 这一集成支持也被广泛使用, 比如 JMS 集成支持中的 MarshallingMessageConverter( 位于 org.springframework.jms.support.converter 包 ) Spring Web MVC 中的 MarshallingView 和 MarshallingHttpMessageConverter 等 下章内容将进入到 Spring 集成的其它各种 Java EE 容器服务中 40

52 7 集成 Java EE 其他容器服务 7.1 简化 JNDI 操作 7.2 集成 EJB 线程池及任务调度集成支持 7.4 集成 JMS 7.5 集成 JavaMail 7.6 集成分布式操作 41

53 7.7 集成 JMX 7.8 集成 Java EE 连接器架构 7.9 小结 42

54 8 Web 层集成支持 8.1 Spring Web MVC 框架 8.2 Spring Portlet MVC 框架 8.3 REST 架构风格 8.4 小结 43

55 9 高级 Spring 3.0 特性 9.1 优雅销毁 DI 容器 9.2 小结 44

56 10 附录 A: 安装及使用 SpringSource Tool Suite STS 是 SpringSource 公司 (VMWare 子公司 ) 针对 Spring 开发者研发的一款重量级 免 费的开发工具 本附录将围绕 STS(SpringSource Tool Suite,SpringSource 工具套件 ) 的安 装及使用展开论述 10.1 获得 SpringSource Tool Suite SpringSource 公司于 网址提供了 STS 的下载入口 图 10-1 给出了对应的操作界面 图 10-1 下载 SpringSource Tool Suite 的操作界面 无论是 Windows, 还是 Linux, 还是 Apple Mac OS X 操作系统用户, 他们都能够使用 到 STS 这里以下载 springsource-tool-suite release-e3.5.2-win32-installer.exe 为例 10.2 安装 SpringSource Tool Suite 安装 STS 的步骤很简单, 但在此之前开发者要准备好 JDK, 比如在 D:\jdk1.6.0_18 位置安装好 Java SE 6 并设置好若干环境变量, 比如将 JAVA_HOME 设置成 D:\jdk1.6.0_18 classpath 设置成.; 将 %JAVA_HOME%\bin 追加到 Path 环境变量中 当通过 DOS 窗口成功运行 java -version 后, 开发者便可开始进行 STS 的安装工作了 图 10-2 示意了 STS 的安装, 并将它安装在 D:\springsource 位置 45

57 图 10-2 安装 SpringSource Tool Suite 随后, 开发者需要为 STS 选定一 JDK, 见图 10-3 图 10-3 选择 JDK 安装完后, 开发者即可启动 STS, 在选定 Eclipse 工作空间 ( 图 10-4) 后, 便可开始享 受 STS 带来的快乐了 本书假定使用 D:\springsource\workspace 目录作为工作空间 图 10-4 选择工作空间 46

58 10.3 使用 SpringSource Tool Suite 本节内容将从不同角度分别阐述 STS 的使用 针对 Spring 3.0 的支持 目标 Java SE/Java EE 项目为使用到 STS 内置的 Spring IDE 支持, 则必须启用 Spring Project Nature 图 10-5 给出了操作界面, 右键单击项目能够看到它 图 10-5 启用 Spring Project Nature 支持 随后, 开发者需要打开 Spring Explorer 视图, 并激活图 10-6 界面 通过它, 能够完 成多项设置, 比如 Spring DI 配置文件的设定 配置集合 命名空间的启用等 图 10-6 配置项目中同 Spring 相关的内容当我们将若干 Spring DI 配置文件放置到 Config Files Tab 页后, 便能够通过 Spring Explorer 视图浏览到它们, 并以可视化方式展现出 DI 容器的内部结构, 比如各协作者间的层次关系 图 10-7 展示了相关界面 47

59 图 10-7 可视化 DI 容器的内部结构图 10-7 展示的内容非常重要 实践证明, 开发者之间经常需要探讨应用的设计 架构师需要评审开发者的工作, 而可视化 DI 容器无疑为这些工作提供了最好的帮助 而且, 开发者可以同这一可视化 DI 容器进行交互 除了针对 DI 容器进行可视化操作外, 开发者还可以借助 Spring IDE 内置的 XML 辅助编写能力, 以加快 Spring DI 配置文件的编写速度及质量的保证, 因为一旦有问题,Spring IDE 会及时指出 为启用 XML 辅助编写, 我们需要用 Spring Config Editor 打开 Spring DI 配置文件 图 10-8 展示了这一特性的使用, 通常用 Alt+ / 键组合能够激活代码辅助特性 图 10-8 Spring IDE 内置的 XML 辅助编写能力 另外,Spring IDE 还有其它许多有意思的地方, 比如图 10-9 展示了开发者可以通过可 视化方式控制当前 Spring DI 配置文件启用的命名空间集合 48

60 图 10-9 控制当前 Spring DI 配置文件启用的命名空间集合 更多细节, 还需要开发者在日常开发工作期间体会 总结 针对 Spring Web Flow 的支持 针对 Spring Batch 的支持 针对 Spring Roo 的支持 图 目标项目启用 Roo IDE 支持 49

61 11 附录 B:Spring 3.0 内置的命名空间 11.1 <beans/> 命名空间 11.2 <context/> 命名空间 11.3 <util/> 命名空间 50

62 12 附录 C:Spring Web Services 12.1 文档驱动的 Web 服务 12.2 面向 OXM 的 Web 服务实现策略 12.3 Web 服务安全 51

63 13 附录 D:Spring Web Flow 13.1 流程致胜 13.2 探索 Spring Web Flow 52

64 14 附录 E:Spring BlazeDS Integration 14.1 Flex-RIA 王者 14.2 简化 BlazeDS 的使用 14.3 深入到 Spring BlazeDS Integration 中 53

65 15 附录 F:Spring Roo 15.1 快速研发之道 Spring Roo 概述 15.2 Spring Roo 架构哲学 15.3 深入到 Spring Roo 中 54

66 16 附录 G: 相关资料 16.1 图书 Expert One-on-One J2EE Development without EJB,WILEY 作者,Rod Johnson Juergen Hoeller Professional Java Development with the Spring Framework,WILEY 作者,Rod Johnson Juergen Hoeller 等 精通 Spring- 深入 Java EE 开发核心技术, 第三版, 电子工业出版社 作者, 罗时飞 AspectJ in Action: Enterprise AOP with Spring Applications, 第二版,Manning 作者,Ramnivas Laddad 网站 Spring 官方网站 : Spring 社区下载 : 通过这一位置, 开发者能够下载到各种 Spring 开源项目包 Spring 社区论坛 : SpringSource 团队博客 : 持续跟进 Spring 的绝佳去处 Java 官方网站 : 55

Untitled

Untitled Spring 4.0.0 spring-framework-reference QQ 413615763 Weibo le Email not-three@foxmail.com 2013.12.16 2.2 2013.12.17 2.3 : 2013.12.18 2.3 : 2013.12.18 2.3 :- Commons Logging Spring Spring Spring IoC StrutsHibernate

More information

Spring3.x开发入门

Spring3.x开发入门 Spring Bean 管理 Spring 的工厂类 课程安排 Spring 的 Bean 管理 (XML 方式 ) Spring 的属性注入 (XML 方式 ) Spring 的 Bean 管理 ( 注解方式 ) Spring 的属性注入 ( 注解方式 ) Spring 的工厂类 Spring 的 Bean 管理 (XML 方式 ) 三种实例化 Bean 的方式 使用类构造器实例化 ( 默认无参数

More information

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc

Microsoft Word - Hibernate与Struts2和Spring组合指导.doc 1.1 组合 Hibernate 与 Spring 1. 在 Eclipse 中, 新建一个 Web project 2. 给该项目增加 Hibernate 开发能力, 增加 Hibernate 相关类库到当前项目的 Build Path, 同时也提供了 hibernate.cfg.xml 这个配置文件 3. 给该项目增加 Spring 开发能力, 增加 spring 相关类库到当前项目的 Build

More information

第03章 控制反转(Spring IoC)

第03章  控制反转(Spring IoC) 3 Spring IoC GoF Design Patterns: Elements of Reusable Object-Oriented Software Programming to an Interface not an Implementation Java Java Java GoF Service Locator IoC IoC Spring IoC 3.1 IoC IoC IoC Dependency

More information

IoC容器和Dependency Injection模式.doc

IoC容器和Dependency Injection模式.doc IoC Dependency Injection /Martin Fowler / Java Inversion of Control IoC Dependency Injection Service Locator Java J2EE open source J2EE J2EE web PicoContainer Spring Java Java OO.NET service component

More information

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc

本章学习目标 小风 Java 实战系列教程 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 本章学习目标 SpringMVC 简介 SpringMVC 的入门案例 SpringMVC 流程分析 配置注解映射器和适配器 配置视图解析器 @RequestMapping 注解的使用 使用不同方式的跳转页面 1. SpringMVC 简介 Spring web mvc 和 Struts2 都属于表现层的框架, 它是 Spring 框架的一部分, 我们可 以从 Spring 的整体结构中看得出来 :

More information

untitled

untitled -JAVA 1. Java IDC 20 20% 5 2005 42.5 JAVA IDC JAVA 60% 70% JAVA 3 5 10 JAVA JAVA JAVA J2EE J2SE J2ME 70% JAVA JAVA 20 1 51 2. JAVA SUN JAVA J2EE J2EE 3. 1. CSTP CSTP 2 51 2. 3. CSTP IT CSTP IT IT CSTP

More information

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat

2. AOP 底层技术实现 小风 Java 实战系列教程 关键词 : 代理模式 代理模型分为两种 : 1) 接口代理 (JDK 动态代理 ) 2) 子类代理 (Cglib 子类代理 ) 需求 :CustomerService 业务类, 有 save,update 方法, 希望在 save,updat 本章学习目标 小风 Java 实战系列教程 AOP 思想概述 AOP 底层技术实现 AOP 术语介绍 SpringAOP 的 XML 方式 HelloWorld SpringAOP 的 XML 方式配置细节 SpringAOP 的注解方式 SpringAOP 的零配置方式 1. AOP 思想概述 1.1. AOP 思想简介 1.2. AOP 的作用 2. AOP 底层技术实现 小风 Java 实战系列教程

More information

J2ME ISBN J2ME MIDP MIDP 2.0 API J2ME Netbeans IDE 4.1 Mobility Pack 4.1 MIDlet MIDlet MIDP PUSH API PDA API Ja

J2ME ISBN J2ME MIDP MIDP 2.0 API J2ME Netbeans IDE 4.1 Mobility Pack 4.1 MIDlet MIDlet MIDP PUSH API PDA API Ja Java JBuilder 2005 2005 6 ISBN 7-121-01166-2 69.00 1 688 JBuilder JBuilder 2005 JBuilder JBuilder 2005 JBuilder 2005 Java Java Java JBuilder 17 J2ME 2006 1 ISBN 7-121-02210-9 39.00 1 436 J2ME MIDP MIDP

More information

优迈科技教学大纲2009版本

优迈科技教学大纲2009版本 java 软 件 工 程 师 培 训 教 学 大 纲 1 JAVA 软 件 工 程 师 培 训 教 学 大 纲 深 圳 软 件 园 人 才 实 训 基 地 2009 年 3 月 目 录 java 软 件 工 程 师 培 训 教 学 大 纲 2 教 学 阶 段...3 第 一 章 JAVA 起 步...3 第 二 章 面 向 对 象 的 编 程...4 第 三 章 数 据 结 构 IO 线 程 网 络...5

More information

EJB-Programming-3.PDF

EJB-Programming-3.PDF :, JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Value Object Design Pattern J2EE Design Patterns Value Object Value Object Factory J2EE EJB Test Client

More information

EJB-Programming-4-cn.doc

EJB-Programming-4-cn.doc EJB (4) : (Entity Bean Value Object ) JBuilder EJB 2.x CMP EJB Relationships JBuilder EJB Test Client EJB EJB Seminar CMP Entity Beans Session Bean J2EE Session Façade Design Pattern Session Bean Session

More information

目 录 目 录... 2 1 平 台 概 述... 3 2 技 术 架 构... 4 3 技 术 特 点... 7 3.1 基 于 统 一 平 台 的 多 产 品 线 支 撑... 7 3.2 先 进 性... 7 3.3 安 全 性... 7 3.4 开 放 性... 8 3.5 高 性 能 和

目 录 目 录... 2 1 平 台 概 述... 3 2 技 术 架 构... 4 3 技 术 特 点... 7 3.1 基 于 统 一 平 台 的 多 产 品 线 支 撑... 7 3.2 先 进 性... 7 3.3 安 全 性... 7 3.4 开 放 性... 8 3.5 高 性 能 和 致 远 协 同 管 理 软 件 V5 平 台 白 皮 书 北 京 致 远 协 创 软 件 有 限 公 司 2014 年 6 月 1 / 20 目 录 目 录... 2 1 平 台 概 述... 3 2 技 术 架 构... 4 3 技 术 特 点... 7 3.1 基 于 统 一 平 台 的 多 产 品 线 支 撑... 7 3.2 先 进 性... 7 3.3 安 全 性... 7 3.4 开 放

More information

untitled

untitled 4.1AOP AOP Aspect-oriented programming AOP 來說 AOP 令 理 Cross-cutting concerns Aspect Weave 理 Spring AOP 來 AOP 念 4.1.1 理 AOP AOP 見 例 來 例 錄 Logging 錄 便 來 例 行 留 錄 import java.util.logging.*; public class HelloSpeaker

More information

new 进行创建对象, 是程序主动去创建依赖对象 ; 而 IoC 是有专门一个容器来创建这些对象, 即由 Ioc 容器来控制对象的创建 ; 谁控制谁? 当然是 IoC 容器控制了对象 ; 控制什么? 那就是主要控制了外部资源获取 ( 不只是对象包括比如文件等 ) 为何是反转, 哪些方面反转了 : 有

new 进行创建对象, 是程序主动去创建依赖对象 ; 而 IoC 是有专门一个容器来创建这些对象, 即由 Ioc 容器来控制对象的创建 ; 谁控制谁? 当然是 IoC 容器控制了对象 ; 控制什么? 那就是主要控制了外部资源获取 ( 不只是对象包括比如文件等 ) 为何是反转, 哪些方面反转了 : 有 本章学习目标 小风 Java 实战系列教程 Spring 框架简介 SpringIOC 的概念和作用 工厂模式设计一个简单的 IOC 容器 SpringIOC 的 XML 方式 HelloWorld SpringIOC 的 XML 方式创建对象配置细节 SpringIOC 的 XML 方式依赖注入 SpringIOC 的注解方式 Spring 整合 Junit 简化测试类编写 1. Spring 框架简介

More information

设计模式 Design Patterns

设计模式 Design Patterns Spring 与 Struts Hibernate 的集成 丁勇 Email:18442056@QQ.com 学习目标 掌握 Spring 与 Struts 的集成 掌握 Spring 与 Hibernate 的集成 学会使用 Spring 实现声明式事务 Spring 与 Hibernate 集成 使用 Spring 简化 Hibernate 编程 使现有使现有 Java Java EE EE 技术更易用

More information

全唐诗28

全唐诗28 ... 1... 1... 1... 2... 2... 2... 3... 3... 4... 4... 4... 5... 5... 5... 5... 6... 6... 6... 6... 7... 7... 7... 7... 8... 8 I II... 8... 9... 9... 9...10...10...10...11...11...11...11...12...12...12...13...13...13...14...14...14...15...15...15...16...16...16...17...17

More information

「香港中學文言文課程的設計與教學」單元設計範本

「香港中學文言文課程的設計與教學」單元設計範本 1. 2. 3. (1) (6) ( 21-52 ) (7) (12) (13) (16) (17) (20) (21) (24) (25) (31) (32) (58) 1 2 2007-2018 7 () 3 (1070) (1019-1086) 4 () () () () 5 () () 6 21 1. 2. 3. 1. 2. 3. 4. 5. 6. 7. 8. 9. ( ) 7 1. 2.

More information

序号:001

序号:001 第 一 组 选 题 简 介 序 号 :001 题 目 : 基 于 BPEL 的 网 上 订 餐 系 统 的 设 计 与 实 现 网 上 订 餐 系 统 是 在 互 联 网 上 进 行 菜 单 信 息 发 布 网 上 订 餐 以 及 维 护 客 户 关 系 的 电 子 商 务 系 统, 餐 饮 企 业 可 以 通 过 这 个 电 子 商 务 系 统 发 布 自 己 的 菜 单 信 息 以 供 客 户

More information

计算机软件技术专业教学计划

计算机软件技术专业教学计划 计 算 机 软 件 技 术 专 业 人 才 培 养 方 案 ( 服 务 外 包 方 向 ) 专 业 大 类 名 称 ( 代 码 ):++(++) 专 业 类 名 称 ( 代 码 ):++++++(++++) 专 业 名 称 ( 代 码 ):+++++++(++++++) 修 业 年 限 : 三 年, 全 日 制 招 生 对 象 : 三 年 制 普 通 高 中 及 对 口 中 职 专 业 毕 业 生

More information

2 Java 语 言 程 序 设 计 教 程 1.2.1 简 单 性 Java 语 言 的 语 法 与 C 语 言 和 C++ 语 言 很 接 近, 使 得 大 多 数 程 序 员 很 容 易 学 习 和 使 用 Java 另 一 方 面,Java 丢 弃 了 C++ 中 很 少 使 用 的 很 难

2 Java 语 言 程 序 设 计 教 程 1.2.1 简 单 性 Java 语 言 的 语 法 与 C 语 言 和 C++ 语 言 很 接 近, 使 得 大 多 数 程 序 员 很 容 易 学 习 和 使 用 Java 另 一 方 面,Java 丢 弃 了 C++ 中 很 少 使 用 的 很 难 第 1 章 Java 概 述 Java 的 诞 生 Java 的 特 点 Java 开 发 环 境 安 装 与 配 置 创 建 并 运 行 一 个 简 单 的 Java 程 序 Java 语 言 是 当 今 计 算 机 软 件 行 业 中 最 热 门 的 网 络 编 程 语 言, 以 Java 为 核 心 的 芯 片 技 术 编 译 技 术 数 据 库 连 接 技 术, 以 及 基 于 企 业 级

More information

群科課程綱要總體課程計畫書

群科課程綱要總體課程計畫書 核 准 文 號 :102 年 4 月 22 日 臺 教 國 署 高 字 第 1020036237 號 國 立 曾 文 高 級 農 工 職 業 學 校 群 科 課 程 綱 要 總 體 課 程 計 畫 書 (102 學 年 度 入 學 學 生 適 用 ) 中 華 民 國 102 年 04 月 22 日 國 立 曾 文 高 級 農 工 職 業 學 校 群 科 課 程 綱 要 總 體 課 程 計 畫 書 核

More information

一、

一、 ... 1...24...58 - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - i. ii. iii. iv. i. ii. iii. iv. v. vi. vii. viii. ix. x. - 9 - xi. - 10 - - 11 - -12- -13- -14- -15- C. @ -16- @ -17- -18- -19- -20- -21- -22-

More information

Microsoft Word - MP2018_Report_Chi _12Apr2012_.doc

Microsoft Word - MP2018_Report_Chi _12Apr2012_.doc 人 力 資 源 推 算 報 告 香 港 特 別 行 政 區 政 府 二 零 一 二 年 四 月 此 頁 刻 意 留 空 - 2 - 目 錄 頁 前 言 詞 彙 縮 寫 及 注 意 事 項 摘 要 第 一 章 : 第 二 章 : 第 三 章 : 第 四 章 : 附 件 一 : 附 件 二 : 附 件 三 : 附 件 四 : 附 件 五 : 附 件 六 : 附 件 七 : 引 言 及 技 術 大 綱 人

More information

南華大學數位論文

南華大學數位論文 1 i -------------------------------------------------- ii iii iv v vi vii 36~39 108 viii 15 108 ix 1 2 3 30 1 ~43 2 3 ~16 1 2 4 4 5 3 6 8 6 4 4 7 15 8 ----- 5 94 4 5 6 43 10 78 9 7 10 11 12 10 11 12 9137

More information

李天命的思考藝術

李天命的思考藝術 ii iii iv v vi vii viii ix x 3 1 2 3 4 4 5 6 7 8 9 5 10 1 2 11 6 12 13 7 8 14 15 16 17 18 9 19 20 21 22 10 23 24 23 11 25 26 7 27 28 12 13 29 30 31 28 32 14 33 34 35 36 5 15 3 1 2 3 4 5 6 7 8 9 10 11

More information

皮肤病防治.doc

皮肤病防治.doc ...1...1...2...3...4...5...6...7...7...9...10... 11...12...14...15...16...18...19...21 I ...22...22...24...25...26...27...27...29...30...31...32...33...34...34...36...36...37...38...40...41...41...42 II

More information

性病防治

性病防治 ...1...2...3...4...5...5...6...7...7...7...8...8...9...9...10...10... 11... 11 I ...12...12...12...13...14...14...15...17...20...20...21...22...23...23...25...27...33...34...34...35...35 II ...36...38...39...40...41...44...49...49...53...56...57...57...58...58...59...60...60...63...63...65...66

More information

中国南北特色风味名菜 _一)

中国南北特色风味名菜 _一) ...1...1...2...3...3...4...5...6...7...7...8...9... 10... 11... 13... 13... 14... 16... 17 I ... 18... 19... 20... 21... 22... 23... 24... 25... 27... 28... 29... 30... 32... 33... 34... 35... 36... 37...

More information

全唐诗24

全唐诗24 ... 1... 1... 2... 2... 3... 3... 4... 4... 5... 5... 6... 6... 7... 7... 8... 8... 9... 9...10...10...10...11...12...12...12...13...13 I II...14...14...14...15...15...15...16...16...16...17...17...18...18...18...19...19...19...20...20...20...21...21...22...22...23...23...23...24

More information

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基

SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 odps-sdk 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基 开放数据处理服务 ODPS SDK SDK 概要 使用 Maven 的用户可以从 Maven 库中搜索 "odps-sdk" 获取不同版本的 Java SDK: 包名 odps-sdk-core odps-sdk-commons odps-sdk-udf odps-sdk-mapred odps-sdk-graph 描述 ODPS 基础功能的主体接口, 搜索关键词 "odpssdk-core" 一些

More information

509 (ii) (iii) (iv) (v) 200, , , , C 57

509 (ii) (iii) (iv) (v) 200, , , , C 57 59 (ii) (iii) (iv) (v) 500,000 500,000 59I 18 (ii) (iii) (iv) 200,000 56 509 (ii) (iii) (iv) (v) 200,000 200,000 200,000 500,000 57 43C 57 (ii) 60 90 14 5 50,000 43F 43C (ii) 282 24 40(1B) 24 40(1) 58

More information

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP: ******************* * 关于 Java 测试试题 ******

エスポラージュ株式会社 住所 : 東京都江東区大島 東急ドエルアルス大島 HP:  ******************* * 关于 Java 测试试题 ****** ******************* * 关于 Java 测试试题 ******************* 問 1 运行下面的程序, 选出一个正确的运行结果 public class Sample { public static void main(string[] args) { int[] test = { 1, 2, 3, 4, 5 ; for(int i = 1 ; i System.out.print(test[i]);

More information

-i-

-i- -i- -ii- -iii- -iv- -v- -vi- -vii- -viii- -ix- -x- -xi- -xii- 1-1 1-2 1-3 1-4 1-5 1-6 1-7 1-8 1-9 1-10 1-11 1-12 1-13 1-14 1-15 1-16 1-17 1-18 1-19 1-20 1-21 2-1 2-2 2-3 2-4 2-5 2-6 2-7 2-8 2-9 2-10 2-11

More information

Microsoft Word - 强迫性活动一览表.docx

Microsoft Word - 强迫性活动一览表.docx 1 1 - / 2 - / 3 - / 4 - / 5 - I. 1. / 2. / 3. 4. 5. 6. 7. 8. 9 10 11. 12. 2 13. 14. 15. 16. 17. 18. 19. 20 21. 22 23. 24. / / 25. 26. 27. 28. 29. 30. 31. II. 1. 2 3. 4 3 5. 6 7 8. 9 10 11 12 13 14. 15.

More information

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit

(TestFailure) JUnit Framework AssertionFailedError JUnit Composite TestSuite Test TestSuite run() run() JUnit Tomcat Web JUnit Cactus JUnit Java Cactus JUnit 26.1 JUnit Java JUnit JUnit Java JSP Servlet JUnit Java Erich Gamma Kent Beck xunit JUnit boolean JUnit Java JUnit Java JUnit Java 26.1.1 JUnit JUnit How

More information

2. 我 沒 有 說 實 話, 因 為 我 的 鞋 子 其 實 是 [ 黑 色 / 藍 色 / 其 他 顏 色.]. 如 果 我 說 我 現 在 是 坐 著 的, 我 說 的 是 實 話 嗎? [ 我 說 的 對 還 是 不 對 ]? [ 等 對 方 回 答 ] 3. 這 是 [ 實 話 / 對 的

2. 我 沒 有 說 實 話, 因 為 我 的 鞋 子 其 實 是 [ 黑 色 / 藍 色 / 其 他 顏 色.]. 如 果 我 說 我 現 在 是 坐 著 的, 我 說 的 是 實 話 嗎? [ 我 說 的 對 還 是 不 對 ]? [ 等 對 方 回 答 ] 3. 這 是 [ 實 話 / 對 的 附 錄 美 國 國 家 兒 童 健 康 與 人 類 發 展 中 心 (NICHD) 偵 訊 指 導 手 冊 I. 開 場 白 1. 你 好, 我 的 名 字 是, 我 是 警 察 [ 介 紹 房 間 內 的 其 他 人, 不 過, 在 理 想 狀 態 下, 房 間 裡 不 該 有 其 他 人 ] 今 天 是 ( 年 月 日 ), 現 在 是 ( 幾 點 幾 分 ) 我 是 在 ( 地 點 ) 問 你

More information

在Spring中使用Kafka:Producer篇

在Spring中使用Kafka:Producer篇 在某些情况下, 我们可能会在 Spring 中将一些 WEB 上的信息发送到 Kafka 中, 这时候我们就需要在 Spring 中编写 Producer 相关的代码了 ; 不过高兴的是,Spring 本身提供了操作 Kafka 的相关类库, 我们可以直接通过 xml 文件配置然后直接在后端的代码中使用 Kafka, 非常地方便 本文将介绍如果在 Spring 中将消息发送到 Kafka 在这之前,

More information

<4D6963726F736F667420576F7264202D203938BEC7A67EABD7B942B0CAC15AC075B3E6BF57A9DBA5CDC2B2B3B92DA5BFBD542E646F63>

<4D6963726F736F667420576F7264202D203938BEC7A67EABD7B942B0CAC15AC075B3E6BF57A9DBA5CDC2B2B3B92DA5BFBD542E646F63> 98 年 3 月 11 日 依 本 校 98 學 年 度 招 生 委 員 會 第 1 次 會 議 核 定 大 同 技 術 學 院 98 學 年 度 重 點 運 動 項 目 績 優 學 生 單 獨 招 生 簡 章 大 同 技 術 學 院 招 生 委 員 會 編 印 校 址 :600 嘉 義 市 彌 陀 路 253 號 電 話 :(05)2223124 轉 203 教 務 處 招 生 專 線 :(05)2223124

More information

基于ECO的UML模型驱动的数据库应用开发1.doc

基于ECO的UML模型驱动的数据库应用开发1.doc ECO UML () Object RDBMS Mapping.Net Framework Java C# RAD DataSetOleDbConnection DataGrod RAD Client/Server RAD RAD DataReader["Spell"].ToString() AObj.XXX bug sql UML OR Mapping RAD Lazy load round trip

More information

<4D6963726F736F667420576F7264202D20B9FABCD2BBFAB9D8B0ECB9ABBDA8D6FEBACDB4F3D0CDB9ABB9B2BDA8D6FEC4DCBAC4BCE0B2E2CFB5CDB3C8EDBCFEBFAAB7A2D6B8B5BCCBB5C3F7CAE92E646F63>

<4D6963726F736F667420576F7264202D20B9FABCD2BBFAB9D8B0ECB9ABBDA8D6FEBACDB4F3D0CDB9ABB9B2BDA8D6FEC4DCBAC4BCE0B2E2CFB5CDB3C8EDBCFEBFAAB7A2D6B8B5BCCBB5C3F7CAE92E646F63> 附 件 : 国 家 机 关 办 公 建 筑 和 大 型 公 共 建 筑 能 耗 监 测 系 统 软 件 开 发 指 导 说 明 书 住 房 和 城 乡 建 设 部 二 〇 〇 九 年 二 月 前 言 为 指 导 各 地 国 家 机 关 办 公 建 筑 和 大 型 公 共 建 筑 能 耗 监 测 系 统 建 设, 住 房 和 城 乡 建 设 部 组 织 有 关 专 家, 在 总 结 吸 收 国 内 已

More information

緒 言 董 事 會 宣 佈, 為 能 更 具 效 率 調 配 本 集 團 內 的 資 金 有 效 降 低 集 團 的 對 外 貸 款, 並 促 進 本 集 團 內 公 司 間 的 結 算 服 務, 於 2016 年 9 月 30 日, 本 公 司 中 糧 財 務 與 管 理 公 司 訂 立 財 務

緒 言 董 事 會 宣 佈, 為 能 更 具 效 率 調 配 本 集 團 內 的 資 金 有 效 降 低 集 團 的 對 外 貸 款, 並 促 進 本 集 團 內 公 司 間 的 結 算 服 務, 於 2016 年 9 月 30 日, 本 公 司 中 糧 財 務 與 管 理 公 司 訂 立 財 務 香 港 交 易 及 結 算 所 有 限 公 司 及 香 港 聯 合 交 易 所 有 限 公 司 對 本 公 告 的 內 容 概 不 負 責, 對 其 準 確 性 或 完 整 性 亦 不 發 表 任 何 聲 明, 並 明 確 表 示, 概 不 對 因 本 公 告 全 部 或 任 何 部 分 內 容 而 產 生 或 因 倚 賴 該 等 內 容 而 引 致 的 任 何 損 失 承 擔 任 何 責 任 JOY

More information

untitled

untitled JavaEE+Android - 6 1.5-2 JavaEE web MIS OA ERP BOSS Android Android Google Map office HTML CSS,java Android + SQL Sever JavaWeb JavaScript/AJAX jquery Java Oracle SSH SSH EJB+JBOSS Android + 1. 2. IDE

More information

穨學前教育課程指引.PDF

穨學前教育課程指引.PDF i 1 1.1 1 1.2 1 4 2.1 4 2.2 5 2.3 7 2.4 9 2.5 11 2.6 1 2 1 5 3.1 1 5 3.2 1 5 19 4.1 19 4.2 19 4.3 2 1 4.4 29 4.5 38 4.6 4 3 4.7 47 50 5.1 5 0 5.2 5 0 5.3 6 2 5.4 9 4 5.5 1 2 6 ( ) 1 2 7 ( ) 1 31 ( ) 1

More information

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii 前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii C# 7 More Effective C# C# C# C# C# C# Common Language Runtime CLR just-in-time

More information

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 ->

1 1 大概思路 创建 WebAPI 创建 CrossMainController 并编写 Nuget 安装 microsoft.aspnet.webapi.cors 跨域设置路由 编写 Jquery EasyUI 界面 运行效果 2 创建 WebAPI 创建 WebAPI, 新建 -> 项目 -> 目录 1 大概思路... 1 2 创建 WebAPI... 1 3 创建 CrossMainController 并编写... 1 4 Nuget 安装 microsoft.aspnet.webapi.cors... 4 5 跨域设置路由... 4 6 编写 Jquery EasyUI 界面... 5 7 运行效果... 7 8 总结... 7 1 1 大概思路 创建 WebAPI 创建 CrossMainController

More information

眼病防治

眼病防治 ( 20 010010) 787 1092 1/32 498.50 4 980 2004 9 1 2004 9 1 1 1 000 ISBN 7-204-05940-9/R 019 1880.00 ( 20.00 ) ...1...1...2...3...5...5...6...7...9... 11...13...14...15...17...18...19...20...21 I II...21...22...23...24...25...27...27...28...29...30...31...33...33...34...36...38...39...40...41...42...43...45

More information

中国南北特色风味名菜 _八)

中国南北特色风味名菜 _八) ( 20 010010) 7871092 1/32 356.25 4 760 2004 8 1 2004 8 1 11 000 ISBN 7-204-05943-3/Z102 1026.00 ( 18.00 ) ...1...2...2...4...6...7...8...9... 10... 11... 12... 13... 13... 14... 15... 17... 18... 19...

More information

FAQ -PowerDesigner9.5.DOC

FAQ -PowerDesigner9.5.DOC PowerDesigner 9.5 FAQ 1. PowerDesigner PowerDesigner PowerDesigner (CASE Tool,Computer Aided Software Engineering) PowerDesigner 1989 9.5 2. PowerDesigner PowerDesigner Internet ( Java) PowerDesigner 7.0

More information

穨ecr2_c.PDF

穨ecr2_c.PDF i ii iii iv v vi vii viii 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 1 26 27 2 28 29 30 31 32 33 34 35 36 37 38 39 40 3 4 41 42 43 5 44 45 46 6 47 48 49 50 51 52 1 53 2 54 55 3 56

More information

電腦相關罪行跨部門工作小組-報告書

電腦相關罪行跨部門工作小組-報告書 - ii - - iii - - iv - - v - - vi - - vii - - viii - (1) 2.1 (2) (3) 13.6 (4) 1.6 (5) 21 (6) (7) 210 (8) (9) (10) (11) ( ) ( 12) 20 60 16 (13) ( ) (

More information

i

i i ii iii iv v vi vii viii ===== 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 ==== ====

More information

发展党员工作手册

发展党员工作手册 发 展 党 员 工 作 问 答 目 录 一 总 论...9 1. 发 展 党 员 工 作 的 方 针 是 什 么? 如 何 正 确 理 解 这 个 方 针?... 9 2. 为 什 么 强 调 发 展 党 员 必 须 保 证 质 量?... 9 3. 如 何 做 到 慎 重 发 展?... 10 4. 如 何 处 理 好 发 展 党 员 工 作 中 的 重 点 与 一 般 的 关 系?...11 5.

More information

i

i 9 1 2 3 4 i 5 6 ii iii iv v vi vii viii 1 1 1 2 3 4 2 5 6 2 3 2.10 ( 2.11 ) ( 2.11 ) ( 2.9 ) 7 8 9 3 10 5% 2% 4 11 93% (2001 02 2003 04 ) ( ) 2,490 (100%) 5 12 25% (2.57% 25%) 6 (2001 02 2003 04 ) 13 100%

More information

39898.indb

39898.indb 1988 4 1998 12 1990 5 40 70.................................................. 40.............................................................. 70..............................................................

More information

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6

1.JasperReport ireport JasperReport ireport JDK JDK JDK JDK ant ant...6 www.brainysoft.net 1.JasperReport ireport...4 1.1 JasperReport...4 1.2 ireport...4 2....4 2.1 JDK...4 2.1.1 JDK...4 2.1.2 JDK...5 2.1.3 JDK...5 2.2 ant...6 2.2.1 ant...6 2.2.2 ant...6 2.3 JasperReport...7

More information

目 录 院 领 导 职 责... 1 院 长 职 责... 1 医 疗 副 院 长 职 责... 1 教 学 副 院 长 职 责... 2 科 研 副 院 长 职 责... 2 后 勤 副 院 长 职 责... 3 主 管 南 院 区 副 院 长 职 责... 3 党 委 书 记 职 责... 4

目 录 院 领 导 职 责... 1 院 长 职 责... 1 医 疗 副 院 长 职 责... 1 教 学 副 院 长 职 责... 2 科 研 副 院 长 职 责... 2 后 勤 副 院 长 职 责... 3 主 管 南 院 区 副 院 长 职 责... 3 党 委 书 记 职 责... 4 目 录 院 领 导 职 责... 1 院 长 职 责... 1 医 疗 副 院 长 职 责... 1 教 学 副 院 长 职 责... 2 科 研 副 院 长 职 责... 2 后 勤 副 院 长 职 责... 3 主 管 南 院 区 副 院 长 职 责... 3 党 委 书 记 职 责... 4 纪 委 书 记 职 责... 5 院 长 办 公 室... 6 院 长 办 公 室 工 作 职 责...

More information

内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指

内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指 内 容 提 要 将 JAVA 开 发 环 境 迁 移 到 Linux 系 统 上 是 现 在 很 多 公 司 的 现 实 想 法, 而 在 Linux 上 配 置 JAVA 开 发 环 境 是 步 入 Linux 下 JAVA 程 序 开 发 的 第 一 步, 本 文 图 文 并 茂 地 全 程 指 导 你 搭 建 Linux 平 台 下 的 JAVA 开 发 环 境, 包 括 JDK 以 及 集

More information

Java 1 Java String Date

Java 1 Java String Date JAVA SCJP Java 1 Java String Date 1Java 01 Java Java 1995 Java Java 21 Java Java 5 1-1 Java Java 1990 12 Patrick Naughton C++ C (Application Programming Interface API Library) Patrick Naughton NeXT Stealth

More information

(i) (ii) (iii) (iv) (v) (vi) (vii) (viii) (ix) (x) (xi) 60.99%39.01%

(i) (ii) (iii) (iv) (v) (vi) (vii) (viii) (ix) (x) (xi) 60.99%39.01% 48.55% 1998 19986 30%20086 2009 2009 200 (i) (ii) (iii) (iv) (v) (vi) (vii) (viii) (ix) (x) (xi) 60.99%39.01% 200820092010 772 928960200820092010 1512928 201 1. 20091222(2009)7267 20042008 16,980,954.02

More information

奥运档案(三).doc

奥运档案(三).doc I...1...2...2...3...5...9...10...10...12...14...15...16...16...17...18...20...21...24...25 II...25...27...28...29...31...32...33...33...34...34...36...37...38...39...40...41...42...43...44...45...45 2008...46

More information

Autodesk Product Design Suite Standard 系统统需求 典型用户户和工作流 Autodesk Product Design Suite Standard 版本为为负责创建非凡凡产品的设计师师和工程师提供供基本方案设计和和制图工具, 以获得令人惊叹叹的产品

Autodesk Product Design Suite Standard 系统统需求 典型用户户和工作流 Autodesk Product Design Suite Standard 版本为为负责创建非凡凡产品的设计师师和工程师提供供基本方案设计和和制图工具, 以获得令人惊叹叹的产品 Autodesk Product Design Suite Standard 20122 系统统需求 典型用户户和工作流 Autodesk Product Design Suite Standard 版本为为负责创建非凡凡产品的设计师师和工程师提供供基本方案设计和和制图工具, 以获得令人惊叹叹的产品设计 Autodesk Product Design Suite Standard 版本包包括以下软件产产品

More information

II II

II II I I II II III 1. 2. 3. III 4. IV 5. 6. 8. 9. 10. 12. IV V V VI VI VII VII VIII VIII IX IX X X XI XI XII XII 1 1 2 2 3 3 4 33 35 4 5 5 6 6 7 ( ) 7 8 8 9 9 10 10 11 11 12 12 13 13 14 14 15 15 16 16 17 17

More information

前 言 根 据 澳 门 特 别 行 政 区 第 11/1999 号 法 律 第 三 条 规 定, 审 计 长 执 行 其 职 责, 已 经 对 财 政 局 提 交 的 2011 年 度 澳 门 特 别 行 政 区 总 帐 目 ( 总 帐 目 ) 进 行 了 审 计 与 2010 年 度 相 同, 本 年 度 的 总 帐 目 由 政 府 一 般 综 合 帐 目 及 特 定 机 构 汇 总 帐 目, 两

More information

目 录 1. 前 言... 1 2. 为 什 么 要 用 ESB... 1 2.1. 技 术 发 展... 1 2.2. 业 务 需 求... 3 2.3. IT 需 求... 4 2.4. IT 与 业 务 一 致 性 要 求... 5 3. TongIntegrator ESB v5 简 介..

目 录 1. 前 言... 1 2. 为 什 么 要 用 ESB... 1 2.1. 技 术 发 展... 1 2.2. 业 务 需 求... 3 2.3. IT 需 求... 4 2.4. IT 与 业 务 一 致 性 要 求... 5 3. TongIntegrator ESB v5 简 介.. TongTech TongIntegrator ESB v5 ( 简 称 TongESB v5) 产 品 白 皮 书 北 京 东 方 通 科 技 公 司 2015 年 目 录 1. 前 言... 1 2. 为 什 么 要 用 ESB... 1 2.1. 技 术 发 展... 1 2.2. 业 务 需 求... 3 2.3. IT 需 求... 4 2.4. IT 与 业 务 一 致 性 要 求...

More information

Java应用框架Spring实验指导书.doc

Java应用框架Spring实验指导书.doc Java Spring lyaiqing@126.com Spring 1. Spring jsp 001 Spring name mike password name Tom password 123456 Mysql 1. a) i. mysql Empl, sql 1. 2. a) Eclipse Web Project :myspring b) jar i. / ii. spring-framework-3.2.0.release

More information

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7.

Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes 包管理理 工具 Helm 蔺礼强 Kubenetes 系列列公开课 2 每周四晚 8 点档 1. Kubernetes 初探 2. 上 手 Kubernetes 3. Kubernetes 的资源调度 4. Kubernetes 的运 行行时 5. Kubernetes 的 网络管理理 6. Kubernetes 的存储管理理 7. Kubernetes

More information

输入 project name 选择完成

输入 project name 选择完成 JAVA 程序访问 HighGo DB 的环境准备 山东瀚高科技有限公司版权所有仅允许不作任何修改的转载和转发 Hibernate 的配置 MyEclipse 中创建新项目 : 选择菜单栏 file---new---project 选择 web project 进行下一步 输入 project name 选择完成 4. 单击 " 添加 JAR/ 文件夹 ", 会如下图出现 JDBC 下载 Hibernate

More information

untitled

untitled CHONGQING INTERNATIONAL ENTERPRISE INVESTMENT CO.,LTD. I II III IV V VI ...7...10...11...13...13...14...15...15...21...32...50...53...54...56...56...56.59...61...61...66...69...72...74...74...75...75...75...77

More information

Microsoft Word - Panel Paper on T&D-Chinese _as at 6.2.2013__final_.doc

Microsoft Word - Panel Paper on T&D-Chinese _as at 6.2.2013__final_.doc 二 零 一 三 年 二 月 十 八 日 會 議 討 論 文 件 立 法 會 CB(4)395/12-13(03) 號 文 件 立 法 會 公 務 員 及 資 助 機 構 員 工 事 務 委 員 會 公 務 員 培 訓 及 發 展 概 況 目 的 本 文 件 介 紹 公 務 員 事 務 局 為 公 務 員 所 提 供 培 訓 和 發 展 的 最 新 概 況, 以 及 將 於 二 零 一 三 年 推 出

More information

1 2 6 8 15 36 48 55 58 65 67 74 76 150 152 1 3 1 2 4 2 2001 2000 1999 12 31 12 31 12 31 304,347 322,932 231,047 14,018 16,154 5,665 (i) 0.162 0.193 0.082 (ii) 0.165 0.227 0.082 (iii) 10.08 13.37 6.47 0.688

More information

最新监察执法全书(七十五).doc

最新监察执法全书(七十五).doc .................... I II.............................. ................................. III IV......................... V................................ ........................... VI .............................

More information

<!-- import outer proper

<!-- import outer proper 概述 基于 Spring 支持的客户端编程, 包括发送方客户端 接收方客户端 发送方客户端代码 :jms-producer 接收方客户端代码 :jms-consumer 发送方客户端 这里基于 demo 进行说明 这个 demo 将往 example.queue 和 example.topic 各发一条信息 文件目录结构 1. src/main/resources/ 2. ---- jndi.properties

More information

无类继承.key

无类继承.key 无类继承 JavaScript 面向对象的根基 周爱 民 / aimingoo aiming@gmail.com https://aimingoo.github.io https://github.com/aimingoo rand = new Person("Rand McKinnon",... https://docs.oracle.com/cd/e19957-01/816-6408-10/object.htm#1193255

More information

江苏宁沪高速公路股份有限公司.PDF

江苏宁沪高速公路股份有限公司.PDF - 1 - - 2 - - 3 - - 4 - - 5 - - 6 - - 7 - - 8 - 33.33% ( ) ( ) ( ) 33.33% ( ) ( ) ( ) 1 1 1992 8 3200001100976 1997 6 27 H 12.22 2001 1 16 A 1.5 2001 12 3 503,774.75 14,914,399,845.00 13,445,370,274.00

More information

季刊9web.indd

季刊9web.indd 在 全 国 现 场 会 上 成 功 展 示 全 国 烟 叶 收 购 暨 现 代 烟 草 农 业 建 设 现 场 会 7 月 6 日 至 8 日 在 昆 明 召 开 在 国 家 局 的 领 导 下, 由 我 司 技 术 开 发 的 烟 站 ( 单 元 ) 烟 叶 管 理 信 息 系 统 在 现 场 会 上 成 功 展 示, 并 得 到 参 会 领 导 及 代 表 们 的 关 注 与 认 可 该 系 统

More information

榫 卯 是 什 麼? 何 時 開 始 應 用 於 建 築 中? 38 中 國 傳 統 建 築 的 屋 頂 有 哪 幾 種 形 式? 40 大 內 高 手 的 大 內 指 什 麼? 42 街 坊 四 鄰 的 坊 和 街 分 別 指 什 麼? 44 北 京 四 合 院 的 典 型 格 局 是 怎 樣 的

榫 卯 是 什 麼? 何 時 開 始 應 用 於 建 築 中? 38 中 國 傳 統 建 築 的 屋 頂 有 哪 幾 種 形 式? 40 大 內 高 手 的 大 內 指 什 麼? 42 街 坊 四 鄰 的 坊 和 街 分 別 指 什 麼? 44 北 京 四 合 院 的 典 型 格 局 是 怎 樣 的 目 錄 中 華 醫 藥 以 醫 術 救 人 為 何 被 稱 為 懸 壺 濟 世? 2 什 麼 樣 的 醫 生 才 能 被 稱 為 華 佗 再 世? 4 中 醫 如 何 從 臉 色 看 人 的 特 質? 6 中 醫 怎 樣 從 五 官 看 病? 8 中 醫 看 舌 頭 能 看 出 些 什 麼 來? 10 中 醫 真 的 能 靠 一 個 枕 頭, 三 根 指 頭 診 病 嗎? 12 切 脈 能 判 斷

More information

绝妙故事

绝妙故事 980.00 III... 1... 1... 4... 5... 8...10...11...12...14...16...18...20...23...23...24...25...27...29...29...31...34...35...36...39...41 IV...43...44...46...47...48...49...50...51...52...54...56...57...59...60...61...62...63...66...67...68...69...70...72...74...76...77...79...80

More information

untitled

untitled 653 JAVA 2008 11 Institution of Software Engineer... 2... 4... 4... 5... 5... 8... 8... 8... 8... 8... 9... 9... 9... 11... 13... 13... 13... 13... 15... 15... 15... 15... 16... 16... 17... 17... 17...

More information

尿路感染防治.doc

尿路感染防治.doc ...1...1...2...4...6...7...7...10...12...13...15...16...18...19...24...25...26...27...28 I II...29...30...31...32...33...34...36...37...37...38...40...40...41...43...44...46...47...48...48...49...52 III...55...56...56...57...58

More information

心理障碍防治(下).doc

心理障碍防治(下).doc ( 20 010010) 787 1092 1/32 498.50 4 980 2004 9 1 2004 9 1 1 1 000 ISBN 7-204-05940-9/R 019 1880.00 ( 20.00 ) ...1...2...2...3...4...5...6...7...8...9...10... 11...12...13...15...16...17...19...21 I ...23...24...26...27...28...30...32...34...37...39...40...42...42...44...47...50...52...56...58...60...64...68

More information

_Chi.ps, page Preflight ( _Chi.indd )

_Chi.ps, page Preflight ( _Chi.indd ) on conviction3 5 1. / 2. 14 3. 2 2 3 4. 372 12 5. 6. 1 7. 1 2 i ii iii iv 8. 9. 1 12 2 2 i ii iii i ii iii 3 iv http://www.pcpd.org.hk v i ii iii 4 i ii i / ii 5 1. 2. 3. i ii iii iv v vi 4. 5. 6 6. 7.

More information

明 德 厚 沉 毅 笃 行

明 德 厚 沉 毅 笃 行 硕 士 研 究 生 培 养 方 案 ( 应 用 型 ) 南 京 工 业 大 研 究 生 部 二 一 三 年 九 月 明 德 厚 沉 毅 笃 行 南 京 工 业 大 文 件 南 工 校 研 [2010]20 号 南 京 工 业 大 应 用 型 研 究 生 培 养 模 式 改 革 试 点 工 作 实 施 方 案 教 育 部 决 定 自 2009 年 起, 扩 大 招 收 以 应 届 本 科 毕 业 生

More information

第一部分

第一部分 1 2 5 8 10 13 15 18 20 32 34 37 40 44 46 48 50 54 58 63 ii. iii. 1 ( ) 2. 2 102 96% 2% 15 ( ) 3. 4. 5. 6. 2 50 ( ) 14 7. 8. ( ) 9. 10. ( ) 11. 3 ( ) 12. ( ) 13. 14. 15. 4 2007/2123 ( ) 2. ( ) (a) (b) (c)

More information

Microsoft Word - Paper on PA (Chi)_2016.01.19.docx

Microsoft Word - Paper on PA (Chi)_2016.01.19.docx 立 法 會 發 展 事 務 委 員 會 二 零 一 六 年 施 政 報 告 及 施 政 綱 領 有 關 發 展 局 的 措 施 引 言 行 政 長 官 在 二 零 一 六 年 一 月 十 三 日 發 表 題 為 創 新 經 濟 改 善 民 生 促 進 和 諧 繁 榮 共 享 的 二 零 一 六 年 施 政 報 告 施 政 報 告 夾 附 施 政 綱 領, 臚 列 政 府 推 行 的 新 措 施 和

More information

Microsoft Word - Entry-Level Occupational Competencies for TCM in Canada200910_ch _2_.doc

Microsoft Word - Entry-Level Occupational Competencies for TCM in Canada200910_ch _2_.doc 草 稿 致 省 級 管 理 單 位 之 推 薦 書 二 零 零 九 年 十 月 十 七 日 加 拿 大 中 醫 管 理 局 聯 盟 All rights reserved 序 言 加 拿 大 中 醫 管 理 局 聯 盟, 於 二 零 零 八 年 一 月 至 二 零 零 九 年 十 月 間, 擬 定 傳 統 中 醫 執 業 之 基 礎 文 件 由 臨 床 經 驗 豐 富 之 中 醫 師 教 育 者 及

More information

OSWorkflow Documentation

OSWorkflow Documentation OSWorkflow Documentation Update Time: 05/09/15 OSWorkflow Java workflow engine API 理 flow 行 XML 來 流 Database UI 不 流 GUI Designer end user 行 JSP+Servlet 行 OSWorkflow 2.8 說 2.7 2.7 了 OSWorkflow library library

More information

Page i

Page i 况 1 1.1.1 1.1.2 1.1.3 2 2.1 2.1.1 2.1.2 2.1.3 2.1.4 Page i 2.2 2.2.1 2.2.2 2.2.3 2.2.4 2.2.5 2.2.6 2.3 2.3.1 Page ii 2.3.2 2.3.3 2.3.4 2.4 2.4.1 2.4.2 2.4.3 Page iii 2.5 2.5.1 2.6 2.6.1 2.6.2 3 3.1 3.1.1

More information

捕捉儿童敏感期

捕捉儿童敏感期 目弽 2010 捕捉儿童敏感期 I a mao 2010-3-27 整理 早教资料每日分享 http://user.qzone.qq.com/2637884895 目弽 目彔 目弽... I 出版前言... - 1 竨一章 4 丢孝子癿敂感朏敀乞... - 1 - 妞妞 0 4 岁 海颖 妞妞癿妈妈... - 1 黑白相亝癿地斱... - 1 斵转... - 2 就丌要新帰子... - 2 小霸王...

More information

Stateless Session Beans(无状态bean)的学习

Stateless Session Beans(无状态bean)的学习 一 Stateless Session Beans( 无状态 bean) 的学习 第一步 : 要定义一个会话 Bean, 首先需要定义一个包含他所有业务方法的接口 这个接口不需要任何注释, 就像普通的 java 接口那样定义 调用 EJB 的客户端通过使用这个接口引用从 EJB 容器得到的会话 Bean 对象 stub 接口的定义如下: HelloWorld.java package com.foshanshop.ejb3;

More information

14A 0.1%5% 14A 14A.52 1 2 3 30 2

14A 0.1%5% 14A 14A.52 1 2 3 30 2 2389 30 1 14A 0.1%5% 14A 14A.52 1 2 3 30 2 (a) (b) (c) (d) (e) 3 (i) (ii) (iii) (iv) (v) (vi) (vii) 4 (1) (2) (3) (4) (5) 400,000 (a) 400,000300,000 100,000 5 (b) 30% (i)(ii) 200,000 400,000 400,000 30,000,000

More information

(Chi)_.indb

(Chi)_.indb 1,000,000 4,000,000 1,000,000 10,000,000 30,000,000 V-1 1,000,000 2,000,000 20,000,00010,000,0005,000,000 3,000,000 30 20% 35% 20%30% V-2 1) 2)3) 171 10,000,00050% 35% 171 V-3 30 V-4 50,000100,000 1) 2)

More information

穨_2_.PDF

穨_2_.PDF 6 7.... 9.. 11.. 12... 14.. 15.... 3 .. 17 18.. 20... 25... 27... 29 30.. 4 31 32 34-35 36-38 39 40 5 6 : 1. 2. 1. 55 (2) 2. : 2.1 2.2 2.3 3. 4. ( ) 5. 6. ( ) 7. ( ) 8. ( ) 9. ( ) 10. 7 ( ) 1. 2. 3. 4.

More information

世界名画及画家介绍(四).doc

世界名画及画家介绍(四).doc II...1...2...2...3...4...5...7...7...8...9...9...10... 11...12...13...14...15...15...16...18...18...19...20 III...21...21...22...24...24...25...26...27...28...29...30...30...31...33...33...34...35...36...36...37...38...39...40...41...42...43

More information

基于CDIO一体化理念的课程教学大纲设计

基于CDIO一体化理念的课程教学大纲设计 Java 语 言 程 序 设 计 课 程 教 学 大 纲 Java 语 言 程 序 设 计 课 程 教 学 大 纲 一 课 程 基 本 信 息 1. 课 程 代 码 :52001CC022 2. 课 程 名 称 :Java 语 言 程 序 设 计 3. 课 程 英 文 名 称 :Java Programming 4. 课 程 类 别 : 理 论 课 ( 含 实 验 上 机 或 实 践 ) 5. 授

More information

Guava学习之Resources

Guava学习之Resources Resources 提供提供操作 classpath 路径下所有资源的方法 除非另有说明, 否则类中所有方法的参数都不能为 null 虽然有些方法的参数是 URL 类型的, 但是这些方法实现通常不是以 HTTP 完成的 ; 同时这些资源也非 classpath 路径下的 下面两个函数都是根据资源的名称得到其绝对路径, 从函数里面可以看出,Resources 类中的 getresource 函数都是基于

More information

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入

詞 彙 表 編 號 詞 彙 描 述 1 預 約 人 資 料 中 文 姓 名 英 文 姓 名 身 份 證 字 號 預 約 人 電 話 性 別 2 付 款 資 料 信 用 卡 別 信 用 卡 號 信 用 卡 有 效 日 期 3 住 房 條 件 入 住 日 期 退 房 日 期 人 數 房 間 數 量 入 100 年 特 種 考 試 地 方 政 府 公 務 人 員 考 試 試 題 等 別 : 三 等 考 試 類 科 : 資 訊 處 理 科 目 : 系 統 分 析 與 設 計 一 請 參 考 下 列 旅 館 管 理 系 統 的 使 用 案 例 圖 (Use Case Diagram) 撰 寫 預 約 房 間 的 使 用 案 例 規 格 書 (Use Case Specification), 繪 出 入

More information

國立中山大學學位論文典藏.PDF

國立中山大學學位論文典藏.PDF I II III IV V VI VII VIII IX X 苷 XI XII 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

More information

Teaching kit_A4_part4.indd

Teaching kit_A4_part4.indd 4 ( 學 生 ) i. 認 識 專 題 研 習 甚 麽 是 專 題 研 習? 專 題 研 習 是 學 會 學 習 的 其 中 一 個 關 鍵 項 目 學 生 根 據 自 己 或 老 師 所 訂 立 的 主 題, 依 照 本 身 的 興 趣 和 能 力, 在 老 師 的 指 導 下, 擬 定 研 習 題 目, 設 定 探 討 的 策 略 和 方 法, 進 行 一 系 列 有 意 義 的 探 索 歷

More information

Microsoft Word zw

Microsoft Word zw 第 1 章 Android 概述 学习目标 : Android Android Android Studio Android Android APK 1.1 1. 智能手机的定义 Smartphone 2. 智能手机的发展 1973 4 3 PC IBM 1994 IBM Simon PDA PDA Zaurus OS 1996 Nokia 9000 Communicator Nokia 9000

More information