是不是可以定义aop:aspectj-autoproxy元素

时间:2014-05-10 11:57:19

标签: java spring spring-aop

我有一个根项目,我无法更改,因为它是其他项目的基础项目。它使用aop:aspectj-autoproxy元素在spring配置中定义aop拦截器。

我有另一个继承基础项目的项目,需要用aop定义自己的拦截器:aspectj-autoproxy,如下所示:

<aop:aspectj-autoproxy >
    <aop:include name="myInterceptor"/>
</aop:aspectj-autoproxy>

但我测试了它,这是不可能的。只考虑基础项目中的第一个配置,我无法移动或修改它。

在这种情况下如何定义拦截器?我可以以某种方式合并两种配置吗?

1 个答案:

答案 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>