我有一个无法更改的根项目,因为它是其他项目的基础项目。它使用 aop:aspectj-autoproxy 元素在 spring 配置中定义 aop 拦截器。
我有另一个项目继承了基础项目,需要使用 aop:aspectj-autoproxy 定义自己的拦截器,如下所示:
<aop:aspectj-autoproxy >
<aop:include name="myInterceptor"/>
</aop:aspectj-autoproxy>
但是我测试了一下,这是不可能的。仅考虑基础项目中的第一个配置,我无法移动或修改它。
在这种情况下我该如何定义我的拦截器?我可以以某种方式合并这两种配置吗?
最佳答案
您可以使用BeanFactoryPostProcessor
来添加包含模式,例如:
public class AspectJAutoProxyConfigurer implements BeanFactoryPostProcessor {
private String[] includePatterns;
@SuppressWarnings({ "rawtypes", "unchecked" })
@Override
public void postProcessBeanFactory(
ConfigurableListableBeanFactory beanFactory) throws BeansException {
BeanDefinition beanDef = beanFactory.getBeanDefinition(AopConfigUtils.AUTO_PROXY_CREATOR_BEAN_NAME);
ManagedList includes = (ManagedList)
beanDef.getPropertyValues().get("includePatterns");
for (String includePattern : this.includePatterns)
includes.add(new TypedStringValue(includePattern));
}
public String[] getIncludePatterns() {
return includePatterns;
}
public void setIncludePatterns(String[] includePatterns) {
this.includePatterns = includePatterns;
}
}
<bean id="autoProxyCreatorConfigurer" class="AspectJAutoProxyConfigurer">
<property name="includePatterns" value="one,two,three" />
</bean>
关于java - 是否可以定义多次aop :aspectj-autoproxy element,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23580766/