切入点不适用于通用接口

时间:2009-07-15 14:54:08

标签: java spring aop

我正在使用Spring框架(2.5)和它的AOP功能。我有一个切入点表达式,比如

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

ItemReader interface是一个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是一个通用接口,切入点不能正确匹配。如果是这种情况,我如何编写切入点表达式以匹配通用接口?

1 个答案:

答案 0 :(得分:1)

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

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

我也不需要使用Map +(我认为这是因为我们正在使用接口),而Map的通用性质也无关紧要。

您确定ItemReader接口类可用且您有可用的实现吗?这就是错误消息所暗示的(如果我在我的测试切入点中放置一个虚拟类名,我可以获得)。也许尝试记录/打印

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

并且类似于您预期的实现类?