新的 bean() 切入点

工程 | Ramnivas Laddad | 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,如果 bean 名称以表示其业务功能的字符串开头。
  2. 选择 bean 的水平切片: 如果您遵循一种约定,其中 bean 名称包含一个字符串,指示它们从架构角度的角色,则 bean() 切入点可以根据 bean 的架构角色选择 bean。 例如,您可以使用 bean(*Repository) 来选择所有存储库 bean,如果 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

获取 Spring 新闻资讯

通过 Spring 新闻资讯保持联系

订阅

领先一步

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

了解更多

获得支持

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

了解更多

即将到来的活动

查看 Spring 社区中所有即将举行的活动。

查看全部