2009-07-15 44 views
2

我使用Spring框架(2.5)和它的AOP功能。我有一个切入点表达式,如切入点不工作的通用接口

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

ItemReader interface是一个春天的界面和它的签名是:

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

该接口有一个命名为“读取”为此,我想申请方法该提醒:该方法的签名是:

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

但是,当我跑我的,上面的切入点表达应用,我发现了以下异常:

java.lang.IllegalArgumentException异常:警告敌不过这种类型名称:org.springframework.batch.item.ItemReader [Xlint:invalidAbsoluteTypeName]

我的猜测是,由于ItemReader是一个通用接口,切入点没有正确匹配。如果是这样的话,我该如何编写我的切入点表达式来匹配通用接口呢?

+0

情况并非如此。由于类型擦除,它不会区分泛型参数。 – cletus 2009-07-15 14:56:14

回答

1

泛型似乎并没有为我一个问题 - 我可以创建地图操作的测试切入点:

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

我并不需要使用地图+是(我认为是因为我们”重新使用接口),Map的一般特性也不重要。

您确保ItemReader接口类可用,并确保您有可用的实现?这就是错误信息的建议(以及如果我在测试切入点中放置了虚拟类名称,我可以得到哪些信息)。也许尝试记录/打印

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

和类似的为您的预期实施类?