Spring AOP 代理:深入解析与应用实践
1. 代理冻结与自动代理概述
在 Spring AOP 中,若不想再允许对代理进行更改,可以将代理属性 setFrozen
设置为 true
。设置之后,任何添加或移除通知的尝试都会引发 AopConfigException
。冻结代理状态是个不错的选择,例如在管理安全相关的切面时,移除任何类型的通知或拦截器意味着撤销授权规则。
Spring 还支持“自动代理”的 Bean 定义,它可以自动为选定的 Bean 创建代理。
2. 经典 Spring 自动代理
在使用 ProxyFactoryBean
时,我们了解到经典的 AOP 使用方式。但为每个需要应用通知的 Bean 单独编写配置显然不是个好办法,尤其是当 Bean 数量较多时。所以,只有当需要配置的 Bean 数量较少时,这种方式才具有可行性。
若需要对大量 Bean 应用 AOP,为避免配置文件过长,可采用自动代理创建系统,它能自动为 Bean 创建代理,从而避免使用 ProxyFactoryBean
。Spring 提供了两种自动代理创建类: BeanNameAutoProxyCreator
和 DefaultAdvisorAutoProxyCreator
。
2.1 BeanNameAutoProxyCreator
BeanNameAutoProxyCreator