spring 未来展望
DESCRIPTION
Spring 未来展望. Mark Pollack 博士. 议题. 部署到云或内部部署. 统一组件模型 全新 Web 应用程序架构 NoSQL 与大数据. NoSQL 、大数据. 核心 模型. Web 、 集成、 批处理. 是否记得此书 … ?. 对此框架是否还有印象?. 某些方面已经改变 …. 版本 0.9 (25.6.2003) 中的变化 ---------------------------------- 与 《 Expert One-on-One J2EE Design and Development》 同时问世的版本之后的首次公开发布 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/1.jpg)
Spring 未来展望Mark Pollack 博士
![Page 2: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/2.jpg)
议题
统一组件模型 全新 Web 应用程序架构 NoSQL 与大数据
部署到云或内部部署
NoSQL、大数据
Web、集成、批处理
![Page 3: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/3.jpg)
…是否记得此书 ?
3
![Page 4: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/4.jpg)
对此框架是否还有印象?
4
![Page 5: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/5.jpg)
…某些方面已经改变
5
版本 0.9 (25.6.2003) 中的变化----------------------------------•与《 Expert One-on-One J2EE Design and Development》同时问世的版本之后的首次公开发布• 后续各种非官方 0.8 CVS 快照
![Page 6: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/6.jpg)
某些方面仍保持原样
6
版本 0.9 (25.6.2003) 中的变化----------------------------------•与《 Expert One-on-One J2EE Design and Development》同时问世的版本之后的首次公开发布• 后续各种非官方 0.8 CVS 快照• 通过 Commons Logging 提供日志• 改进的 web 框架•常规的加强和修正• 全新示例应用程序 "Petclinic"
![Page 7: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/7.jpg)
某些方面仍保持原样
7
“ 我认为 Spring 是独一无二的,原因如下:
• 它解决了其他许多流行框架所没有解决的重要问题
• Spring 既是综合性的,也是模块化的
• Spring 设计为从零开始帮助您编写易于测试的代码
• Spring ”是一项日显其重要性的集成技术
- Rod Johnson, TheServerSide.com, 2005
![Page 8: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/8.jpg)
Spring 包含的内容
8
![Page 9: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/9.jpg)
Spring – 统一组件模型
9
![Page 10: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/10.jpg)
SimpleObject简单对象
依存关系注入
(DI)
面向方面编程
(AOP)
可移植服务抽象
还记得此模型吗?
![Page 11: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/11.jpg)
SimpleObject注释组件
注入注释
可组合构造型
面向服务的注释
注释透视
![Page 12: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/12.jpg)
一个典型注释组件
@Servicepublic class MyBookAdminService implements BookAdminService {
@Autowired public MyBookAdminService(AccountRepository ar) { … }
@Transactional public BookUpdate updateBook(Addendum addendum) { … }}
![Page 13: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/13.jpg)
1. 可组合构造型模型
• 用于自定义构造型的强大选项
@Service@Scope("request")@Transactional(rollbackFor=Exception.class)@Retention(RetentionPolicy.RUNTIME)public @interface MyService {}
@MyServicepublic class BookAdminService { …}
![Page 14: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/14.jpg)
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 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/15.jpg)
3. 面向服务的注释• 例如,声明性事务和声明性计划
@Transactionalpublic BookUpdate updateBook(Addendum addendum) { …}
@Scheduled(cron = "0 0 12 * * ?")public void performTempFileCleanup() { …}
![Page 16: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/16.jpg)
示例:声明性缓存
• 基于全功能缓存抽象
@Cacheablepublic Owner loadOwner(int id);
@Cacheable(condition="name.length < 10")public Owner loadOwner(String name);
@CacheEvictpublic void deleteOwner(int id);
![Page 17: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/17.jpg)
@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 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/18.jpg)
示例:声明性模型验证
public class Book { @NotNull @Past private Date releaseDate;}
@RequestMapping("/books/new")
public void newBook(@Valid Book book) { … }
• JSR-303“Bean ”验证 作为共用基础
![Page 19: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/19.jpg)
示例:声明性格式设定
• 注释推动的数字和日期格式设定
public class Book { @NotNull @Past @DateTimeFormat(iso=ISO.DATE) private Date releaseDate;}
![Page 20: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/20.jpg)
逐步构建您的注释组件
• 典型方法:一个简明的 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 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/21.jpg)
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 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/22.jpg)
配置类@Configuration
public class MyBookAdminConfig {
@Bean
public BookAdminService myBookAdminService() {
MyBookAdminService service = new MyBookAdminService();
service.setDataSource(bookAdminDataSource());
return service;
}
@Bean
public DataSource bookAdminDataSource() {
…
}
}
![Page 23: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/23.jpg)
不依赖 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 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/24.jpg)
总结
• Spring 与众不同的注释组件模型– 可组合构造型模型– 注入注释– 面向服务的注释– 灵活的逐步构建选项– 如果需要:完全不依赖 XML 的部署
![Page 25: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/25.jpg)
• 我们为何需要全新应用程序架构?• 这种架构应是什么样子的?• 我如何利用 Spring 构建这类应用程序?
应用程序架构
![Page 26: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/26.jpg)
变革的动力
![Page 27: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/27.jpg)
用户期望
变革的动力
全新客户端设备
企业期望
QoS• Internet 范围???• 艰难熬过 AWS 故障
混合这一必然趋势
数据
![Page 28: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/28.jpg)
自:服务器端应用程序至:智能客户端和服务
![Page 29: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/29.jpg)
客户端
服务器
视图生成视图生成 控制器控制器
服务层服务层
存储库存储库通道通道 RDBMSRDBMS
CRUD
应用程序服务器
浏览器
基于浏览器的
HTML 呈现
(逐步增强)
基于浏览器的
HTML 呈现
(逐步增强)
HTML HTTP
![Page 30: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/30.jpg)
客户端
服务器
服务层服务层
存储库存储库通道通道 RDBMSRDBMS
CRUD
浏览器应用程序或本机嵌入
JSON HTTP 和 websocket
HTML5 和 JS 引擎
控制器控制器DOMDOM客户端模型客户端模型 web 暂
存web 暂存
事件和通知
![Page 31: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/31.jpg)
客户端
云 /PaaS
服务层服务层
存储库存储库通道通道 RDBMSRDBMS
CRUD
浏览器应用程序或本机嵌入
JSON HTTP 和 websocket
HTML5 和 JS 引擎
控制器控制器DOMDOM客户端模型客户端模型 web 暂
存web 暂存
服务服务 服务服务 服务服务 业务 /域服务
事件和通知
![Page 32: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/32.jpg)
客户端
PaaSCRUD
存储库存储库通道通道 RDBMSRDBMS
浏览器应用程序或本机嵌入
JSON HTTP 和 websocket
HTML5 和 JS 引擎
控制器控制器DOMDOM客户端模型客户端模型 web 暂
存web 暂存
服务服务 服务服务 服务服务 业务 / 域服务
事件和通知
![Page 33: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/33.jpg)
客户端
PaaS
浏览器应用程序或本机嵌入
JSON HTTP 和 websocket
HTML5 和 JS 引擎控制器控制器DOMDOM
客户端模型客户端模型 web 暂存
web 暂存
服务服务 服务服务 服务服务 业务 / 域服务
服务服务 服务服务 服务服务平台服务、 Web API
SQLSQL NoSQLNoSQL 其他
事件和通知
![Page 34: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/34.jpg)
HTML5(及本机)
PaaS
JSON HTTP 和 Websocket
HTML5 & JS Engine
应用程序
服务
事件和通知
![Page 35: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/35.jpg)
智能客户端
![Page 36: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/36.jpg)
蒙提霍尔游戏
![Page 37: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/37.jpg)
蒙提霍尔游戏
毛茸茸、憨态可掬的灰色小倭狐猴!http://www.factzoo.com/mammals/gray-mouse-lemur-small-furry-gray.html
![Page 38: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/38.jpg)
蒙提霍尔游戏
![Page 39: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/39.jpg)
蒙提霍尔游戏
坚持还是改变主意?
![Page 40: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/40.jpg)
• Cujo– curl
– wire
– when
– aop
• 单击
客户端代码走查和演示
$> 演示
![Page 41: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/41.jpg)
服务端设计
![Page 42: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/42.jpg)
前沿:SPA、 REST (及 WebSocket)
![Page 43: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/43.jpg)
应用程序、 REST 和 WebSocket本机应用程序
基于浏览器的应用程序
应用程序商店
(Web 应用程序)及服务
REST
SPA
ws:
下载
交互
![Page 44: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/44.jpg)
• 以 Spring MVC 为基础
• Spring Data REST – 通过 CRUD 进行基本实体管理– …构建于
• Spring HATEOAS– 链接生成器– 资源组装器
采用 Spring 进行基于 REST 的 API 设计
![Page 45: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/45.jpg)
蒙提霍尔游戏资源
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 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/46.jpg)
蒙提霍尔门资源
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 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/47.jpg)
蒙提霍尔门资源
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 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/48.jpg)
设计模式
资源组装器 资源
域对象
表示控制器
![Page 49: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/49.jpg)
• Spring MVC• Spring Hateoas
代码走查和演示
50
$> 演示
![Page 50: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/50.jpg)
• 我们为何需要全新数据访问解决方案?• 它们应是什么样子的?• 我如何利用 Spring 构建这类应用程序?
数据访问
![Page 51: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/51.jpg)
变革的动力
![Page 52: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/52.jpg)
全新数据世界
53
![Page 53: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/53.jpg)
数据革命
54
![Page 54: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/54.jpg)
让数据发挥作用
55
![Page 55: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/55.jpg)
Spring 的数据使命观
56
89% of all virtualized applications in the world run on VMware.
Gartner, December 2008“ 为大数据、 NoSQL 和关系存储提
供基于 Spring 的熟悉而一致的编程模型,同时保持存储所特有的特性和功能。
![Page 56: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/56.jpg)
• 一致性• 准确性
– JPA != NoSQL
• 工作效率– 模板类– 对象映射– 存储库
• 横向整合– Spring Integration
– Spring Batch
– Gemfire 7.0
”从天南到海北,趣事无处不在!
57
编程模型
Gemfire
数据技术
JPA/JDBC
• 今年 60 次发布
• SpringOne 2GX 发布计划
• O’Reilly 图书
![Page 57: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/57.jpg)
配置
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 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/58.jpg)
映射
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 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/59.jpg)
存储库
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 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/60.jpg)
• 大数据问题也属于集成问题
横向集成
61
收集 转换 RT 分析 吸收 批量分析 分发 使用
Spring Integration & Data
Spring Hadoop + Batch
Spring MVCTwitter Search& GardenhoseTwitter Search& Gardenhose RedisRedis
![Page 61: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/61.jpg)
• Spring Integration • Spring Data
代码走查和演示
$> 演示
![Page 62: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/62.jpg)
接下来的内容 ?
![Page 63: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/63.jpg)
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 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/64.jpg)
Spring Integration、 Batch、 Data
• 统一平台,可满足现有 + 新集成市场的需求
共享数据集成框架
• 通过单一模块化数据流 API 和 DSL ,将 Spring Integration、 Batch、 Data 结合起来•通用适配器、串行器、解串器•批量作业调度,数据处理管道整合
Spring Integration
•企业集成•企业消息传递•通道抽象•适配器
Spring Data
• 关系数据库与 NoSQL•对象映射•CRUD、存储库• 现在还有 Hadoop
Spring Batch
•批量作业调度•分析程序、映射程序•读写程序•局部处理等
![Page 65: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/65.jpg)
• 简化 Java 开发• 帮助企业开发人员应对最艰巨的挑战
Spring …始终致力于
![Page 66: Spring 未来展望](https://reader031.vdocuments.net/reader031/viewer/2022013109/56814bbd550346895db8912f/html5/thumbnails/66.jpg)
谢谢!