AOP通知不起作用

通常通知不起作用有以下两个原因,这两个原因全都被我碰到了,都是一些不容易发现的点:

  1. 切入点表达式书写错误,仔细看看自己的类名包名有咩有拼写错误。
    表达式的原型是:

    execution(modifiers-pattern? ret-type-pattern  
                       declaring-type-pattern?name-pattern(param-pattern) 
                       throws-pattern?)
    

    解释:
    modifiers-pattern 访问权限类型
    ret-type-pattern 返回值类型
    declaring-type-pattern 包名类名
    name-pattern 方法名(参数类型和参数个数)
    throws-pattern 抛出异常类型
    ? 可选

    * 0至多个任意字符
    .. 用在方法参数中,表示任意多个参数 用在包名后,表示当前包及其子包路径
    + 用在类名后,表示当前类及其子类 用在接口后,表示当前接口及其实现类

    以下给出一个切入点表达式的例子,用作练习:
    execution(public * *(..))
    代表任意公共方法
    execution(* * ..SomeServiceImpl.do*(..))
    代表任意返回类型 任意包及其子包下的SomeServiceImpl类中的以do开头的所有方法,参数任意, 而且 ..之后不能加空格,否则会报错。

  2. 还有可能是在创建测试类时,用了接口的实现类强制转换成接口,比如下面的形式:
    NumberService service = (NumberServiceImpl)ctx.getBean("numberService");
    将接口的实现类强制转换成接口,这样是不对的.
    因为你只要实现了接口,就可以使用这个接口的所有方法,操作上是不需要进行转换的.

    可以仔细想一想,某个实现类应该是不能强制转换成接口的,因为接口的范围更大一些,某个实现类范围小,这样转换是不合适的.有哪位大神知道原理的话,欢迎跟我们分享一下呀!

    而正确的做法应该是:
    NumberService service = (NumberService)ctx.getBean("numberService");

这样你的通知就能起作用了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值