SpringAop如何通过某个子类切父类

网友投稿 986 2022-11-20

SpringAop如何通过某个子类切父类

SpringAop如何通过某个子类切父类

目录SpringAop通过某个子类切父类正确方法1正确方法2SpringAOP会忽略从父类继承的方法如何解决这个问题呢?

SpringAop通过某个子类切父类

代码如下

package com.zjy;

public abstract class A{

public void a(){

system.out.printlin("【a】方法被调用");

}

}

package com.zjy;

public class B extends A{

public void b(){

system.out.printlin("【b】方法被调用");

}

}

package com.zjy;

public class C extends A{

public void c(){

system.out.printlin("【c】方法被调用");

}

}

package com.zjy;

public class D extends A{

public void d(){d

system.out.printlin("【d】方法被调用");

}

}

要求如下,我们想要在代码通过B类使用a方法时候进行切面增强,通过其他类进行使用时,都不进行增强

within 和 execution的精确到类均不能对父类方法进行增强

正确方法1

@Before("execution(* com.zjy.*.*(..))")

public void dealOtherServicePointcut(JoinPoint joinPoint) {

Object aThis = joinPoint.getThis();

if((aThis instanceof B )){

String name = joinPoint.getSignature().getName();

log.info("进入前置方法****************************************************["+name+"]");

}

}

方法1是使用com.zjy包下的所有子类进行筛选,将类进行模糊匹配

正确方法2

@Before("execution(* com.zjy..*.*(..))")

public void dealOtherServicePointcut(JoinPoint joinPoint) {

Object aThis = joinPoint.getThis();

if((aThis instanceof B )){

String name = joinPoint.getSignature().getName();

log.info("进入前置方法****************************************************["+name+"]");

}

}

方法2是使用com.zjy包下的所有类以及下级包下的类,进行筛选,将类进行模糊匹配。

注意:

1.要使用instanceof关键字进行类的过滤,否则其他类也会进行增强。

2.无需考虑在增强时类需要多次代理,因为在AOP增强时只会生成一个代理类,并且大多数的类都会有代理类的生成,所以无需考虑(将没必要的类也进行了代理,后续需要使用instanceof进行判断对性能的降低)。

3.within 和 execution的精确到类均不能对父类方法进行增强

SpringAOP会忽略从父类继承的方法

在项目中,我想拦截所有的dao类,结构如下:

dao

---| generic

---| GenericDao

---| GoodsDao

---| SupermarketDao

---| UserDao

下面的三个dao 继承自 统一的父类(GenericDao),在beans.xml中,我只拦截了下面的三个子类,beans.xml中的部分代码如下:

结果从GenericDao 中继承下来的方法都没有被aop 拦截到。

如何解决这个问题呢?

让切面也匹配父类(同时匹配父类和子类),修改如下:

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:白话空间统计二十七:统计学七支柱之空间统计版本(二)聚合(1)
下一篇:PySpark算子处理空间数据全解析(2): 啥是算子(1):RDD
相关文章

 发表评论

暂时没有评论,来抢沙发吧~