我正在使用Spring Framework
和AspectJ
版本1.8.9
我有很多服务类,让我们考虑一下
关键是,每个人都有一个saveOne
方法。因此
如果我使用以下内容:
@Pointcut(value="execution(* com.manuel.jordan.service.impl.*ServiceImpl.saveOne(Car, ..)) && args(entity) && target(object)")
public void saveOnePointcut(Car entity, Object object){}
@Before(value="ServicePointcut.saveOnePointcut(entity, object)")
public void beforeAdviceSaveOne(Car entity, Object object){
有效。直到这里为了更好地理解:
Car
)注意:我需要第一个参数用于审核和记录目的。因此它是强制性的。
为了避免冗长并为每个实体创建更多,我想使用'超类'类型。我试过
@Pointcut(value="execution(* com.manuel.jordan.service.impl.*ServiceImpl.saveOne(Object, ..)) && args(entity) && target(object)")
public void saveOnePointcut(Object entity, Object object){}
@Before(value="ServicePointcut.saveOnePointcut(entity, object)")
public void beforeAdviceSaveOne(Object entity, Object object){
现在观察第一个参数是Object
并且它不起作用。
如果可以完成此要求,那么正确的语法是什么?
我已阅读Clarification around Spring-AOP pointcuts and inheritance,但仅适用于没有参数的方法
答案 0 :(得分:2)
您可以尝试使用Object+
而不只是Object
。 +
表示扩展目标类的所有类。所以您的方面代码将如下所示:
@Pointcut(value="execution(* com.manuel.jordan.service.impl.*ServiceImpl.saveOne(Object+, ..)) && args(entity) && target(object)")
public void saveOnePointcut(Object entity, Object object){}
@Before(value="ServicePointcut.saveOnePointcut(entity, object)")
public void beforeAdviceSaveOne(Object entity, Object object){
我用我的代码示例尝试了这个,它适用于所有类型的参数。