【发布时间】:2013-04-16 17:00:32
【问题描述】:
可以阻止某些类的 AOP 代理吗?
例如,当使用 Spring Security 中的 global-method-security 时。在这种情况下,我希望代理大多数带有注释的 bean。但是对于某些 bean,我已经在使用具有某些特殊语义的自定义代理。
任何想法表示赞赏!
【问题讨论】:
标签: spring proxy spring-security aop
可以阻止某些类的 AOP 代理吗?
例如,当使用 Spring Security 中的 global-method-security 时。在这种情况下,我希望代理大多数带有注释的 bean。但是对于某些 bean,我已经在使用具有某些特殊语义的自定义代理。
任何想法表示赞赏!
【问题讨论】:
标签: spring proxy spring-security aop
我认为没有一个简单的方法可以做到。
我看到两个选项:
扩展 SecuredAnnotationSecurityMetadataSource 并覆盖 findAttributes() 方法。然后禁用secured-annotation 并使用metadata-source-ref 属性启用您自己的SecuredAnnotationSecurityMetadataSource。 (更简单,但仅适用于 Spring Security)
其他(更通用的)方法是覆盖AbstractAutoProxyCreator 的shouldSkip() 方法,并使用Spring Security 注册的bean 定义上的setBeanClassName() 方法在BeanFactoryPostProcessor 中设置您自己的AutoproxyCreator,即AopConfigUtils.AUTO_PROXY_CREATOR_BEAN_NAME。对于这种方法,您需要注意您最终使用的AutoProxyCreator 的实现是什么(InfrastructureAdvisorAutoProxyCreator、AspectJAwareAdvisorAutoProxyCreator 或AnnotationAwareAspectJAutoProxyCreator)
【讨论】: