小编典典

切入点不适用于通用接口

java

我正在使用Spring框架(2.5)及其AOP功能。我有一个切入点表达,例如

@Pointcut("execution(public * org.springframework.batch.item.ItemReader+.read(..))")
public void itemReaderMethods() {}

ItemReader接口是一个Spring接口,它的签名是:

org.springframework.batch.item.ItemReader<T>

该接口有一个名为“ read”的方法,我要对其应用此建议:方法签名为:

org.springframework.batch.item.ItemReader.read()

但是,当我使用上述切入点表达式运行应用程序时,出现以下异常:

java.lang.IllegalArgumentException:警告与此类型名称不匹配:org.springframework.batch.item.ItemReader
[Xlint:invalidAbsoluteTypeName]

我的猜测是,由于ItemReader是通用接口,因此切入点无法正确匹配。如果是这样,我该如何编写切入点表达式以匹配通用接口?


阅读 180

收藏
2020-11-26

共1个答案

小编典典

泛型对我来说似乎不是问题-我可以在Map操作上创建测试切入点:

@Around(value="execution(* java.util.Map.size(..))")

我也不需要使用Map +(我想那是因为我们正在使用接口),并且Map的通用性质也没有关系。

您确定ItemReader接口类可用并且您有可用的实现吗?这就是错误消息的含义(如果在测试切入点中输入虚拟类名,则可以得到该错误信息)。也许尝试记录/打印

Class.forName("org.springframework.batch.item.ItemReader")

和您预期的实现类类似?

2020-11-26