新的 bean() 切点

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

Spring 2.5 引入了一个新的切点指示符 -- bean(),它允许选择与匹配名称模式的 Bean 中的连接点。现在,可以将自动代理机制与 Spring-AspectJ 集成一起使用来选择特定的 Bean,即使存在多个相同类型的 Bean。早些时候,可以使用BeanNameAutoProxyCreator来实现类似的结果;但是,该机制不适用于 Schema 样式或 @AspectJ 方面。

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

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

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

此切点表示 Spring 对 AspectJ 切点表达式语言的特定扩展,因此仅在基于 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 社区中所有即将举行的活动。

查看全部