java - 是否可以定义多次aop :aspectj-autoproxy element

标签 java spring spring-aop

我有一个无法更改的根项目,因为它是其他项目的基础项目。它使用 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/

相关文章:

java - 在 Java 中实现 Trie

java - Kafka 数据丢失,在生产者中

java - Spring Cache Evict 不起作用

java - 使用 Spring Security ACL

java - 我可以在 aop java 中声明围绕建议本身的建议吗?

java - 私有(private)方法的方法拦截器

java - "if"语句 block 无法正常工作

java - 使用 spring 数据从 mongodb 中选择随机条目

JAVA面向切面编程-运行时切面编织和类加载时切面编织

java - 为什么应用程序完成后 java 进程没有关闭?