【问题标题】:AspectJ matching return type as interface with genericsAspectJ 匹配返回类型作为与泛型的接口
【发布时间】:2015-06-05 14:54:28
【问题描述】:

我正在尝试创建一个 AspectJ Aspect 来拦截具有通用接口的返回方法。

这是我的 AspectJ

@AspectJ
public class MyAspect {

    @AfterReturning("execution(java.util.Collection+<mypackage.MyAbstractEntity+> mypackage.mvc.controllers..*.*(..))", returning = "list")
    public doStuff(JoinPoint j, Collection<MyAbstractEntity> list) {
    }
}

这是我想要编入的班级:

package mypackage.mvc.controller;

public class MyController {
    // MyEntity extends MyAbstractEntity
    public List<MyEntity> findAll() {
    }
}

我做错了什么?

【问题讨论】:

    标签: aspectj


    【解决方案1】:

    解决了!

    将“加号”放在泛型定义之后(“加号”表示“扩展它的类”):

    java.util.Collection<mypackage.MyAbstractEntity+>+
    

    并将“列表”收缩为“?扩展”:

    public doStuff(JoinPoint j, Collection<? extends MyAbstractEntity> list) {
    

    代码将如下所示:

    @AspectJ
    public class MyAspect {
    
        @AfterReturning("execution(java.util.Collection<mypackage.MyAbstractEntity+>+ mypackage.mvc.controllers..*.*(..))", returning = "list")
        public doStuff(JoinPoint j, Collection<MyAbstractEntity> list) {
        }
    }
    

    【讨论】:

    • 那个小加号没有很好的文档记录!非常感谢!
    • @Shaded "plus" 表示“扩展它的类”,以防收集专业化
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-29
    • 1970-01-01
    • 2016-08-15
    • 2020-09-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多