1 / 66

Spring 未来展望

Spring 未来展望. Mark Pollack 博士. 议题. 部署到云或内部部署. 统一组件模型 全新 Web 应用程序架构 NoSQL 与大数据. NoSQL 、大数据. 核心 模型. Web 、 集成、 批处理. 是否记得此书 … ?. 对此框架是否还有印象?. 某些方面已经改变 …. 版本 0.9 (25.6.2003) 中的变化 ---------------------------------- 与 《 Expert One-on-One J2EE Design and Development》 同时问世的版本之后的首次公开发布

vivi
Download Presentation

Spring 未来展望

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Spring 未来展望 Mark Pollack 博士

  2. 议题 部署到云或内部部署 • 统一组件模型 • 全新 Web 应用程序架构 • NoSQL 与大数据 NoSQL、大数据 核心模型 Web、集成、批处理

  3. 是否记得此书…?

  4. 对此框架是否还有印象?

  5. 某些方面已经改变… • 版本 0.9 (25.6.2003) 中的变化 • ---------------------------------- • 与《Expert One-on-One J2EE Design and Development》同时问世的版本之后的首次公开发布 • 后续各种非官方 0.8 CVS 快照

  6. 某些方面仍保持原样 • 版本 0.9 (25.6.2003) 中的变化 • ---------------------------------- • 与《Expert One-on-One J2EE Design and Development》同时问世的版本之后的首次公开发布 • 后续各种非官方 0.8 CVS 快照 • 通过 Commons Logging 提供日志 • 改进的 web 框架 • 常规的加强和修正 • 全新示例应用程序 "Petclinic"

  7. 某些方面仍保持原样 • “我认为 Spring 是独一无二的,原因如下: • 它解决了其他许多流行框架所没有解决的重要问题 • Spring 既是综合性的,也是模块化的 • Spring 设计为从零开始帮助您编写易于测试的代码 • Spring 是一项日显其重要性的集成技术” • - Rod Johnson, TheServerSide.com, 2005

  8. Spring 包含的内容

  9. Spring – 统一组件模型

  10. 还记得此模型吗? 简单 对象 Simple Object 依存关系注入 (DI) 面向方面编程 (AOP) 可移植服务抽象

  11. 注释透视 注释组件 Simple Object 注入注释 可组合构造型 面向服务的注释

  12. 一个典型注释组件 @Service publicclassMyBookAdminService implementsBookAdminService { @Autowired publicMyBookAdminService(AccountRepository ar) { … } @Transactional publicBookUpdate updateBook(Addendum addendum) { … } }

  13. 1. 可组合构造型模型 用于自定义构造型的强大选项 @Service @Scope("request") @Transactional(rollbackFor=Exception.class) @Retention(RetentionPolicy.RUNTIME) public@interfaceMyService {} @MyService public classBookAdminService { … }

  14. 2. 注入注释 Spring 的 @Autowired 和 @Value 与 JSR-330 的 @Inject 的对照 @Autowired publicMyBookAdminService(@Qualifier("myRepo")AccountRepository ar, @Value("#{systemProperties.databaseName}") String dbName) { … } @Inject publicMyBookAdminService(@Named("myRepo")AccountRepository ar) { … }

  15. 3. 面向服务的注释 例如,声明性事务和声明性计划 @Transactional publicBookUpdate updateBook(Addendum addendum) { … } @Scheduled(cron = "0 0 12 * * ?") public voidperformTempFileCleanup() { … }

  16. 示例:声明性缓存 基于全功能缓存抽象 @Cacheable publicOwner loadOwner(int id); @Cacheable(condition="name.length < 10") publicOwner loadOwner(String name); @CacheEvict publicvoiddeleteOwner(int id);

  17. @RequestMapping(value = "/books/{id}", method = GET) publicBook findBook(@PathVariable("id")long id) { returnthis.bookAdminService.findBook(id); } 示例:Spring MVC - @PathVariable http://mybookstore.com/books/12345

  18. 示例:声明性模型验证 • publicclassBook { • @NotNull • @Past • privateDate releaseDate; • } • @RequestMapping("/books/new") • public void newBook(@Valid Book book) { … } • JSR-303“Bean验证”作为共用基础

  19. 示例:声明性格式设定 注释推动的数字和日期格式设定 publicclass Book { @NotNull @Past @DateTimeFormat(iso=ISO.DATE) private Date releaseDate; }

  20. 逐步构建您的注释组件 典型方法:一个简明的 XML bean 定义文件 <context:component-scan base-package=”com.myapp”/> @Repository / @Service / @Controller / @Configuration stereotype compare: JPA persistence.xml with @Entity classes 替代方法:AnnotationConfigApplicationContext scan(basePackage) register(componentClass) register(configurationClass)

  21. WebApplicationInitializer /** * Servlet 3.0 based initializer, autodetected by Spring. */ publicclassMyWebAppInitializer implementsWebApplicationInitializer { publicvoidonStartup(ServletContext sc) throwsServletException { // Create the 'root' Spring application context AnnotationConfigWebApplicationContext root =newAnnotationConfigWebApplicationContext(); root.scan("com.mycompany.myapp"); root.register(FurtherConfig.class); // Manages the lifecycle of the root application context sc.addListener(newContextLoaderListener(root)); ... } }

  22. 配置类 @Configuration publicclassMyBookAdminConfig { @Bean publicBookAdminService myBookAdminService() { MyBookAdminService service = newMyBookAdminService(); service.setDataSource(bookAdminDataSource()); returnservice; } @Bean publicDataSource bookAdminDataSource() { … } }

  23. 不依赖 XML 的 JPA 设置 @Configuration publicclassMyBookAdminConfig { @Bean publicFactoryBean myEntityManagerFactoryBean() { LocalContainerEntityManagerFactoryBean emfb =newLocalContainerEntityManagerFactoryBean(); emfb.setPackagesToScan(“com.mycompany.myapp”); emfb.setDataSource(bookAdminDataSource()); returnemfb; } @Bean publicDataSource bookAdminDataSource() { … } }

  24. 总结 Spring 与众不同的注释组件模型 可组合构造型模型 注入注释 面向服务的注释 灵活的逐步构建选项 如果需要:完全不依赖 XML 的部署

  25. 应用程序架构 • 我们为何需要全新应用程序架构? • 这种架构应是什么样子的? • 我如何利用 Spring 构建这类应用程序?

  26. 变革的动力

  27. 变革的动力 用户 期望 • 数据 • 全新客户 • 端设备 • QoS • Internet 范围??? • 艰难熬过 AWS 故障 • 企业 • 期望 • 混合这一必然趋势

  28. 自:服务器端应用程序至:智能客户端和服务

  29. 客户端 基于浏览器的 HTML 呈现 (逐步增强) 浏览器 HTML HTTP 视图 生成 控制器 应用程序 服务器 服务层 通道 存储库 RDBMS 服务器 CRUD

  30. 客户端 HTML5 和 JS 引擎 浏览器应用程序或本机嵌入 客户端模型 web 暂存 JSON HTTP 和 websocket 事件 和通知 服务层 DOM 控制器 通道 存储库 RDBMS 服务器 CRUD

  31. 客户端 HTML5 和 JS 引擎 浏览器应用程序或本机嵌入 客户端模型 web 暂存 业务/ 域服务 JSON HTTP 和 websocket 事件 和通知 服务层 DOM 控制器 云/ PaaS 服务 服务 服务 通道 存储库 RDBMS CRUD

  32. 客户端 HTML5 和 JS 引擎 浏览器应用程序或本机嵌入 客户端模型 web 暂存 业务/ 域服务 JSON HTTP 和 websocket 事件 和通知 DOM 控制器 服务 服务 服务 PaaS CRUD 通道 存储库 RDBMS

  33. 客户端 HTML5 和 JS 引擎 浏览器应用程序或本机嵌入 客户端模型 web 暂存 业务/ 域服务 JSON HTTP 和 websocket 事件 和通知 DOM 控制器 服务 服务 服务 服务 服务 服务 平台服务、Web API SQL NoSQL PaaS 其他

  34. HTML5 & JS Engine 应用程序 HTML5 (及本机) JSON HTTP 和 Websocket 事件 和 通知 PaaS 服务

  35. 智能客户端

  36. 蒙提霍尔游戏

  37. 蒙提霍尔游戏 毛茸茸、憨态可掬的灰色小倭狐猴! http://www.factzoo.com/mammals/gray-mouse-lemur-small-furry-gray.html

  38. 蒙提霍尔游戏

  39. 蒙提霍尔游戏 坚持还是改变主意?

  40. 客户端代码走查和演示 • Cujo • curl • wire • when • aop • 单击 $> 演示

  41. 服务端设计

  42. 前沿:SPA、REST(及 WebSocket)

  43. 应用程序、REST 和 WebSocket 本机 应用程序 应用程序商店 (Web 应用 程序)及服务 REST ws: SPA 下载 交互 基于浏览器的应用程序

  44. 采用 Spring 进行基于 REST 的 API 设计 • 以 Spring MVC 为基础 • Spring Data REST • 通过 CRUD 进行基本实体管理 • 构建于… • Spring HATEOAS • 链接生成器 • 资源组装器

  45. 蒙提霍尔游戏资源 POST /games 201 Created Location : /games/{id} GET /games/{id} 200 OK {status: “awaiting_initial_selection” links: [ { rel : “self”, href : “http://…/games/{id}” }, { rel : “doors”, href : “http://…/games/{id}/doors”}, { rel : “history”, href : “http://…/games/{id}/history”}]}

  46. 蒙提霍尔门资源 GET /games/{id}/doors 200 OK { doors: [ {status : “closed”, content : “unknown”, links : [ {rel : “self”, href : “http://…/games{id}/doors/1”}]}, {status : “closed”, content : “unknown”, links : [ {rel : “self”, href : “http://…/games{id}/doors/2”}]}, {status : “closed”, content : “unknown”, links : [ {rel : “self”, href : “http://…/games{id}/doors/3”}]} ], links: [ { rel : “self”, href : “http://…/games{id}/doors”} ] }

  47. 蒙提霍尔门资源 PATCH (PUT) /games/{id}/doors/{id} {“status”: “SELECTED”} 200 OK {status: “SELECTED”, content : “unknown”, links: [ {rel : “self”, href : “http://…/games{id}/doors/1”} PATCH (PUT) /games/{id}/doors/{id} {“status”: “OPENED”} 200 OK {status: “OPENED”, content : “juergen”, links: [ {rel : “self”, href : “http://…/games{id}/doors/1”}

  48. 设计模式 资源 组装器 资源 控制器 表示 域对象

  49. 代码走查和演示 • Spring MVC • Spring Hateoas $> 演示

  50. 数据访问 • 我们为何需要全新数据访问解决方案? • 它们应是什么样子的? • 我如何利用 Spring 构建这类应用程序?

More Related