Top Banner
Spring 未未未未 Mark Pollack 未未
66

Spring 未来展望

Jan 16, 2016

Download

Documents

Vivi

Spring 未来展望. Mark Pollack 博士. 议题. 部署到云或内部部署. 统一组件模型 全新 Web 应用程序架构 NoSQL 与大数据. NoSQL 、大数据. 核心 模型. Web 、 集成、 批处理. 是否记得此书 … ?. 对此框架是否还有印象?. 某些方面已经改变 …. 版本 0.9 (25.6.2003) 中的变化 ---------------------------------- 与 《 Expert One-on-One J2EE Design and Development》 同时问世的版本之后的首次公开发布 - PowerPoint PPT Presentation
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Spring  未来展望

Spring 未来展望Mark Pollack 博士

Page 2: Spring  未来展望

议题

统一组件模型 全新 Web 应用程序架构 NoSQL 与大数据

部署到云或内部部署

NoSQL、大数据

Web、集成、批处理

Page 3: Spring  未来展望

…是否记得此书 ?

3

Page 4: Spring  未来展望

对此框架是否还有印象?

4

Page 5: Spring  未来展望

…某些方面已经改变

5

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

Page 6: Spring  未来展望

某些方面仍保持原样

6

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

Page 7: Spring  未来展望

某些方面仍保持原样

7

“ 我认为 Spring 是独一无二的,原因如下:

• 它解决了其他许多流行框架所没有解决的重要问题

• Spring 既是综合性的,也是模块化的

• Spring 设计为从零开始帮助您编写易于测试的代码

• Spring ”是一项日显其重要性的集成技术

- Rod Johnson, TheServerSide.com, 2005

Page 8: Spring  未来展望

Spring 包含的内容

8

Page 9: Spring  未来展望

Spring – 统一组件模型

9

Page 10: Spring  未来展望

SimpleObject简单对象

依存关系注入

(DI)

面向方面编程

(AOP)

可移植服务抽象

还记得此模型吗?

Page 11: Spring  未来展望

SimpleObject注释组件

注入注释

可组合构造型

面向服务的注释

注释透视

Page 12: Spring  未来展望

一个典型注释组件

@Servicepublic class MyBookAdminService implements BookAdminService {

@Autowired public MyBookAdminService(AccountRepository ar) { … }

@Transactional public BookUpdate updateBook(Addendum addendum) { … }}

Page 13: Spring  未来展望

1. 可组合构造型模型

• 用于自定义构造型的强大选项

@Service@Scope("request")@Transactional(rollbackFor=Exception.class)@Retention(RetentionPolicy.RUNTIME)public @interface MyService {}

@MyServicepublic class BookAdminService { …}

Page 14: Spring  未来展望

2. 注入注释

• Spring 的 @Autowired 和 @Value 与 JSR-330 的@Inject 的对照

@Autowiredpublic MyBookAdminService(@Qualifier("myRepo") AccountRepository ar, @Value("#{systemProperties.databaseName}") String dbName) { …}

@Injectpublic MyBookAdminService(@Named("myRepo") AccountRepository ar) { …}

Page 15: Spring  未来展望

3. 面向服务的注释• 例如,声明性事务和声明性计划

@Transactionalpublic BookUpdate updateBook(Addendum addendum) { …}

@Scheduled(cron = "0 0 12 * * ?")public void performTempFileCleanup() { …}

Page 16: Spring  未来展望

示例:声明性缓存

• 基于全功能缓存抽象

@Cacheablepublic Owner loadOwner(int id);

@Cacheable(condition="name.length < 10")public Owner loadOwner(String name);

@CacheEvictpublic void deleteOwner(int id);

Page 17: Spring  未来展望

@RequestMapping(value = "/books/{id}", method = GET)

public Book findBook(@PathVariable("id") long id) {

return this.bookAdminService.findBook(id);

}

http://mybookstore.com/books/12345

示例: Spring MVC - @PathVariable

Page 18: Spring  未来展望

示例:声明性模型验证

public class Book { @NotNull @Past private Date releaseDate;}

@RequestMapping("/books/new")

public void newBook(@Valid Book book) { … }

• JSR-303“Bean  ”验证 作为共用基础

Page 19: Spring  未来展望

示例:声明性格式设定

• 注释推动的数字和日期格式设定

public class Book { @NotNull @Past @DateTimeFormat(iso=ISO.DATE) private Date releaseDate;}

Page 20: Spring  未来展望

逐步构建您的注释组件

• 典型方法:一个简明的 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)

Page 21: Spring  未来展望

WebApplicationInitializer

/** * Servlet 3.0 based initializer, autodetected by Spring. */public class MyWebAppInitializer implements WebApplicationInitializer {

public void onStartup(ServletContext sc) throws ServletException {

// Create the 'root' Spring application context AnnotationConfigWebApplicationContext root =

new AnnotationConfigWebApplicationContext(); root.scan("com.mycompany.myapp"); root.register(FurtherConfig.class);

// Manages the lifecycle of the root application context sc.addListener(new ContextLoaderListener(root));

... }}

Page 22: Spring  未来展望

配置类@Configuration

public class MyBookAdminConfig {

@Bean

public BookAdminService myBookAdminService() {

MyBookAdminService service = new MyBookAdminService();

service.setDataSource(bookAdminDataSource());

return service;

}

@Bean

public DataSource bookAdminDataSource() {

}

}

Page 23: Spring  未来展望

不依赖 XML 的 JPA 设置@Configuration

public class MyBookAdminConfig {

@Bean

public FactoryBean myEntityManagerFactoryBean() {

LocalContainerEntityManagerFactoryBean emfb = new LocalContainerEntityManagerFactoryBean();

emfb.setPackagesToScan(“com.mycompany.myapp”);

emfb.setDataSource(bookAdminDataSource());

return emfb;

}

@Bean

public DataSource bookAdminDataSource() { … }

}

Page 24: Spring  未来展望

总结

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

Page 25: Spring  未来展望

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

应用程序架构

Page 26: Spring  未来展望

变革的动力

Page 27: Spring  未来展望

用户期望

变革的动力

全新客户端设备

企业期望

QoS• Internet 范围???• 艰难熬过 AWS 故障

混合这一必然趋势

数据

Page 28: Spring  未来展望

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

Page 29: Spring  未来展望

客户端

服务器

视图生成视图生成 控制器控制器

服务层服务层

存储库存储库通道通道 RDBMSRDBMS

CRUD

应用程序服务器

浏览器

基于浏览器的

HTML 呈现

(逐步增强)

基于浏览器的

HTML 呈现

(逐步增强)

HTML HTTP

Page 30: Spring  未来展望

客户端

服务器

服务层服务层

存储库存储库通道通道 RDBMSRDBMS

CRUD

浏览器应用程序或本机嵌入

JSON HTTP 和 websocket

HTML5 和 JS 引擎

控制器控制器DOMDOM客户端模型客户端模型 web 暂

存web 暂存

事件和通知

Page 31: Spring  未来展望

客户端

云 /PaaS

服务层服务层

存储库存储库通道通道 RDBMSRDBMS

CRUD

浏览器应用程序或本机嵌入

JSON HTTP 和 websocket

HTML5 和 JS 引擎

控制器控制器DOMDOM客户端模型客户端模型 web 暂

存web 暂存

服务服务 服务服务 服务服务 业务 /域服务

事件和通知

Page 32: Spring  未来展望

客户端

PaaSCRUD

存储库存储库通道通道 RDBMSRDBMS

浏览器应用程序或本机嵌入

JSON HTTP 和 websocket

HTML5 和 JS 引擎

控制器控制器DOMDOM客户端模型客户端模型 web 暂

存web 暂存

服务服务 服务服务 服务服务 业务 / 域服务

事件和通知

Page 33: Spring  未来展望

客户端

PaaS

浏览器应用程序或本机嵌入

JSON HTTP 和 websocket

HTML5 和 JS 引擎控制器控制器DOMDOM

客户端模型客户端模型 web 暂存

web 暂存

服务服务 服务服务 服务服务 业务 / 域服务

服务服务 服务服务 服务服务平台服务、 Web API

SQLSQL NoSQLNoSQL 其他

事件和通知

Page 34: Spring  未来展望

HTML5(及本机)

PaaS

JSON HTTP 和 Websocket

HTML5 & JS Engine

应用程序

服务

事件和通知

Page 35: Spring  未来展望

智能客户端

Page 36: Spring  未来展望

蒙提霍尔游戏

Page 37: Spring  未来展望

蒙提霍尔游戏

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

Page 38: Spring  未来展望

蒙提霍尔游戏

Page 39: Spring  未来展望

蒙提霍尔游戏

坚持还是改变主意?

Page 40: Spring  未来展望

• Cujo– curl

– wire

– when

– aop

• 单击

客户端代码走查和演示

$> 演示

Page 41: Spring  未来展望

服务端设计

Page 42: Spring  未来展望

前沿:SPA、 REST (及 WebSocket)

Page 43: Spring  未来展望

应用程序、 REST 和 WebSocket本机应用程序

基于浏览器的应用程序

应用程序商店

(Web 应用程序)及服务

REST

SPA

ws:

下载

交互

Page 44: Spring  未来展望

• 以 Spring MVC 为基础

• Spring Data REST – 通过 CRUD 进行基本实体管理– …构建于

• Spring HATEOAS– 链接生成器– 资源组装器

采用 Spring 进行基于 REST 的 API 设计

Page 45: Spring  未来展望

蒙提霍尔游戏资源

46

POST /games201 CreatedLocation : /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”}]}

Page 46: Spring  未来展望

蒙提霍尔门资源

47

GET /games/{id}/doors200 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”} ] }

Page 47: Spring  未来展望

蒙提霍尔门资源

48

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”}

Page 48: Spring  未来展望

设计模式

资源组装器 资源

域对象

表示控制器

Page 49: Spring  未来展望

• Spring MVC• Spring Hateoas

代码走查和演示

50

$> 演示

Page 50: Spring  未来展望

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

数据访问

Page 51: Spring  未来展望

变革的动力

Page 52: Spring  未来展望

全新数据世界

53

Page 53: Spring  未来展望

数据革命

54

Page 54: Spring  未来展望

让数据发挥作用

55

Page 55: Spring  未来展望

Spring 的数据使命观

56

89% of all virtualized applications in the world run on VMware.

Gartner, December 2008“ 为大数据、 NoSQL 和关系存储提

供基于 Spring 的熟悉而一致的编程模型,同时保持存储所特有的特性和功能。

Page 56: Spring  未来展望

• 一致性• 准确性

– JPA != NoSQL

• 工作效率– 模板类– 对象映射– 存储库

• 横向整合– Spring Integration

– Spring Batch

– Gemfire 7.0

”从天南到海北,趣事无处不在!

57

编程模型

Gemfire

数据技术

JPA/JDBC

• 今年 60 次发布

• SpringOne 2GX 发布计划

• O’Reilly 图书

Page 57: Spring  未来展望

配置

58

@Configuration@ComponentScan@EnableTransactionManagement@EnableJpaRepositoriespublic class JpaConfig {

@Bean public DataSource dataSource() { ... }

@Bean public PlatformTransactionManager transactionManager() { ... }}

@Configuration@ComponentScan@EnableMongoRepositoriespublic class MongoConfig extends AbstractMongoConfig {

@Override public Mongo mongo() throws Exception { … } @Override protected String getDatabaseName() { … }

}

Page 58: Spring  未来展望

映射

59

@Entity@Table(name = "Orders")public class Order {

@ManyToOne(optional = false) private Customer customer;

@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) @JoinColumn(name = "order_id") private Set<LineItem> lineItems = new HashSet<LineItem>();}

@Document(collection="Orders")public class Order {

@DBRef private Customer customer;

private Set<LineItem> lineItems = new HashSet<LineItem>();

...}

Page 59: Spring  未来展望

存储库

60

public interface ProductRepository extends CrudRepository<Product, Long>, QueryDslPredicateExecutor<Product> {

Page<Product> findByDescriptionContaining(String description, Pageable pageable);

@Query("select p from Product p where p.attributes[?1] = ?2") List<Product> findByAttributes(String attribute, String value);}

Page 60: Spring  未来展望

• 大数据问题也属于集成问题

横向集成

61

收集 转换 RT 分析 吸收 批量分析 分发 使用

Spring Integration & Data

Spring Hadoop + Batch

Spring MVCTwitter Search& GardenhoseTwitter Search& Gardenhose RedisRedis

Page 61: Spring  未来展望

• Spring Integration • Spring Data

代码走查和演示

$> 演示

Page 62: Spring  未来展望

接下来的内容 ?

Page 63: Spring  未来展望

Spring – 框架 下一版本主题• Java SE 8

– SE 8 语言功能与 Spring 编程模型自然契合• Java EE 7

– 支持 Jcache、 JMS 2.0、 JPA 2.1、 Bean Validation 1.1

• 应用程序内的注释驱动型消息侦听和注释驱动型事件• Websocket• 删除已弃用的类• 系统要求: Java SE 6+、 Java EE 5+

Page 64: Spring  未来展望

Spring Integration、 Batch、 Data

• 统一平台,可满足现有 + 新集成市场的需求

共享数据集成框架

• 通过单一模块化数据流 API 和 DSL ,将 Spring Integration、 Batch、 Data 结合起来•通用适配器、串行器、解串器•批量作业调度,数据处理管道整合

Spring Integration

•企业集成•企业消息传递•通道抽象•适配器

Spring Data

• 关系数据库与 NoSQL•对象映射•CRUD、存储库• 现在还有 Hadoop

Spring Batch

•批量作业调度•分析程序、映射程序•读写程序•局部处理等

Page 65: Spring  未来展望

• 简化 Java 开发• 帮助企业开发人员应对最艰巨的挑战

Spring …始终致力于

Page 66: Spring  未来展望

谢谢!