我有一个根项目,我无法更改,因为它是其他项目的基础项目。它使用aop:aspectj-autoproxy元素在spring配置中定义aop拦截器。
我有另一个继承基础项目的项目,需要用aop定义自己的拦截器:aspectj-autoproxy,如下所示:
<aop:aspectj-autoproxy >
<aop:include name="myInterceptor"/>
</aop:aspectj-autoproxy>
但我测试了它,这是不可能的。只考虑基础项目中的第一个配置,我无法移动或修改它。
在这种情况下如何定义拦截器?我可以以某种方式合并两种配置吗?
答案 0 :(得分:1)
您可以使用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>