66
Spring 未未未未 Mark Pollack 未未

Spring 未来展望

  • Upload
    vivi

  • View
    79

  • Download
    3

Embed Size (px)

DESCRIPTION

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

Citation preview

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  未来展望

谢谢!