Ramnivas Laddad

Ramnivas Laddad

校友
博客文章作者:Ramnivas Laddad

扩展 Spring Cloud

工程 | 2014年8月5日 | ...

Spring Cloud 最有趣的特性之一是其可扩展性。您可以扩展它以支持额外的云平台、增强现有支持的云平台、支持新的服务、新的服务连接器——所有这些都不需要修改 Spring Cloud 代码本身。在本篇博客中,我们将探讨这一特性。如果您尚未阅读,请务必先阅读本系列的第一篇第二篇博客,以获取足够的背景信息。

可扩展性的三个维度

Spring Cloud 提供了沿三个正交方向的可扩展性。您可以在这些方向之一上对其进行扩展,而正交性确保了……

以编程方式使用 Spring Cloud

工程 | 2014年7月29日 | ...

上一篇博客中,我展示了如何使用Spring Cloud的 Java 配置选项声明性地获取服务连接器(如果您需要,也支持 XML 命名空间)。在本篇博客中,我们将仔细探讨如何以编程方式使用 Spring Cloud。这对于您无法使用 Java 或 XML 配置的情况会很有帮助。它还将揭示 Spring Cloud 的工作原理,并为您阅读本系列中讨论扩展 Spring Cloud 的下一篇博客做好准备。

要使用 Spring Cloud,我们需要访问一个 Cloud 类的对象。但是,您不能直接创建 Cloud 对象(它的构造函数不是公共的)。相反,您将通过 CloudFactory 获取它……

介绍 Spring Cloud

工程 | 2014年6月3日 | ...

开发、部署和操作云应用程序应该像本地应用程序一样容易(甚至更容易)。这过去是,将来也应该是任何云平台、库或工具背后的指导原则。Spring Cloud——一个开源库——使为云开发 JVM 应用程序变得容易。有了它,应用程序可以在 Cloud Foundry 和 Heroku 等多个云平台中轻松连接服务并发现关于云环境的信息。此外,您可以将其扩展到其他云平台和新服务。

在本篇博客(系列第一篇)中,我将介绍 Spring Cloud 并从应用程序开发者的角度展示其用法。我们将开发一个简单的应用程序,并将其部署到 Cloud FoundryHeroku……

使用 Spring 和 Cloud Foundry 服务:第二部分 - 自动重新配置

工程 | 2011年11月4日 | ...

如果您观看了Cloud Foundry 发布会的视频,您会看到我们部署了从 Spring Web Flow 示例下载的 Spring Travel 应用程序,将 MySQL 服务绑定到它,然后将应用程序拖放到 STS 中的 Cloud Foundry 服务器,而无需对应用程序本身进行任何修改。由于应用程序配置为使用本地数据库,这怎么可能呢?这就是自动重新配置发挥作用的时候。

Cloud Foundry 致力于降低您的初始投资。除了金钱之外,真正的投资来自于开发者花费的时间……

使用 Spring 和 Cloud Foundry 服务:第一部分 - 基础知识

工程 | 2011年10月13日 | ...

Cloud Foundry 提供的服务使得编写高效且实用的应用程序成为可能。开发者现在可以自由选择合适的各类服务,而无需担心其运维。例如,应用程序的一部分可以选择 Postgres 用于事务访问至关重要的部分,MongoDB 用于将数据作为文档集合进行交互有意义的部分,Redis 用于键值是正确抽象的部分,以及 RabbitMQ 用于消息传递有助于创建有效架构的部分。在这个由四部分组成的博客系列中,我们将探讨 Spring 应用程序如何使用 Cloud Foundry……

领域对象依赖注入特性新改进

工程 | 2008年1月24日 | ...

Spring 的依赖注入(DI)机制允许配置应用程序上下文中定义的 bean。如果您想将相同的想法扩展到非 bean 对象怎么办?Spring 对 领域对象 DI 的支持利用 AspectJ 织入(weaving)将 DI 扩展到任何对象,即使它是由 Web 或 ORM 框架创建的。这使得创建具有丰富领域行为的对象成为可能,因为领域对象现在可以与注入的对象协作。在本篇博客中,我将讨论 Spring Framework 在这一领域的最新改进。

领域对象 DI 背后的核心思想非常简单:一个通过 AspectJ 织入的切面(aspect)选择与任何符合特定规范的对象的创建反序列化相对应的连接点(join point)。对这些连接点的通知(advice)会将依赖项注入到正在创建或反序列化的对象中。当然,细节决定成败。例如,如何选择与反序列化相对应的连接点,或者如何确保每个对象只注入一次依赖项?通过提供一些预先编写的……

新的 bean() 切入点

工程 | 2007年9月24日 | ...

Spring 2.5 提供了一个新的切入点指示符 -- bean(),它允许选择与名称模式匹配的 bean 中的连接点。现在,即使存在多个同类型的 bean,也可以结合自动代理机制和 Spring-AspectJ 集成来选择特定的 bean。以前,您可以使用 BeanNameAutoProxyCreator 来实现类似的结果;但是,该机制不适用于 Schema 风格或 @AspectJ 的切面。

除了选择特定的 bean 之外,如果您遵循合适的命名约定,此切入点指示符还提供了两种有趣的方式来选择 bean

  1. 选择 bean 的垂直切片: 如果您遵循一种约定,bean 名称包含一个字符串,该字符串从业务角度指示其角色,则 bean() 切入点可以根据其业务角色选择 bean。例如,如果 bean 名称以表示其业务功能的字符串开头,您可以使用 bean(account*) 切入点来选择所有与会计相关的 bean,例如 accountRepositoryaccountServiceaccountController
  2. 选择 bean 的水平切片: 如果您遵循一种约定,bean 名称包含一个字符串,该字符串从架构角度指示其角色,则 bean() 切入点可以根据其架构角色选择 bean。例如,如果 bean 名称以表示其架构角色的字符串结尾,您可以使用 bean(*Repository) 来选择所有 Repository bean。如果没有 bean() 切入点,您必须依赖包结构或基于类型的切入点,这有时可能会有点过于受限。
The bean() Pointcut Designator

图 1:使用 bean() 切入点根据名称选择 bean 的水平和垂直切片

此切入点是 AspectJ 切入点表达式语言的 Spring 特定扩展,因此仅在基于 Spring 的应用程序中有用。名称模式遵循 AspectJ 的名称模式匹配规则,其中 '*' 是唯一允许的通配符。下表显示了一些示例切入点以及它们选择的 bean。
切入点 选择的连接点
bean(accountRepository) 名称为 "accountRepository" 的 bean
!bean(accountRepository) 除了 "accountRepository" bean 之外的任何 bean
bean(*) 任何 bean
bean(account*) 名称以 "account" 开头的任何 bean
bean(*Repository) 名称以 "Repository" 结尾的任何 bean
bean(accounting/showaccount) 名称为 accounting/showaccount 的 bean(例如,指定处理该 URL 的控制器)
bean(accounting/*) 名称以 "accounting/" 开头的任何 bean(例如,指定处理任何与会计相关的 URL 的控制器)
bean(accounting/*/edit) 名称以 "accounting/" 开头并以 "/edit" 结尾的任何 bean(例如,指定处理与会计相关的编辑操作功能的任何控制器)
bean(*dataSource) || bean(*DataSource) 名称以 "dataSource" 或 "DataSource" 结尾的任何 bean
bean(service:name=monitoring) 名称为 "service:name=monitoring" 的 bean

领先一步

VMware 提供培训和认证,助您加速进步。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供了对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

近期活动

查看 Spring 社区所有即将到来的活动。

查看全部