领先一步
VMware 提供培训和认证,以加速您的进步。
了解更多Spring 2.5 引入了一个新的切点指示符 -- bean(),它允许选择与匹配名称模式的 Bean 中的连接点。现在,可以将自动代理机制与 Spring-AspectJ 集成一起使用来选择特定的 Bean,即使存在多个相同类型的 Bean。早些时候,可以使用BeanNameAutoProxyCreator来实现类似的结果;但是,该机制不适用于 Schema 样式或 @AspectJ 方面。
除了选择特定的 Bean 之外,如果遵循适当的命名约定,此切点指示符还提供了两种有趣的方式来选择 Bean
图 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 |