类继承/接口实现时Spring AOP切入点注意事项

编程技术  /  houtizong 发布于 3年前   85

最近好多人问我说我的我的切入点没有错误啊,怎么不起作用?而且大部分情况都是写AOP切入点时带有类继承或接口实现时出现的问题。在此总结一下,方便后人查阅。而且建议使用如IntelliJ IDEA、STS或者Eclipse装AspectJ插件自动显示切入点是否匹配目标对象/目标方法。

 

1、相关类

1.1、抽象基类

我们在写一些项目时,都会抽象一些基类,比如DAO、Service等。

 

//基础接口package com.sishuok.common;public interface BaseService {    public void save();}//基础实现package com.sishuok.common;public abstract class BaseServiceImpl implements BaseService {    @Override    public void save() {    }}

 

 

1.2、实现类

 

//业务接口package com.sishuok.user;import com.sishuok.common.BaseService;public interface UserService extends BaseService {    public void saveUser();//额外添加的接口}//业务实现package com.sishuok.user;import com.sishuok.common.BaseService;import com.sishuok.common.BaseServiceImpl;import org.springframework.stereotype.Service;@Servicepublic class UserServiceImpl extends BaseServiceImpl implements UserService {    @Override    public void saveUser() {//此处只实现了业务接口,没有覆盖基础实现    }}

 

 

2、错误的切入点

2.1、"execution(* com.sishuok.user.UserService.*())"  如果这样写切入点,只能匹配到UserService实现类中的直接实现的方法。即只能匹配saveUser方法,而无法匹配save方法。当然你可以在UserServiceImpl中再覆盖下save方法也可以,但是这样基类就没有意义了。

2.2、”execution(* com.sishuok.user.UserServiceImpl.*())“ 如果想只对UserServiceImpl中的方法进行匹配,这样写也是和上边有一样的问题。

 

3、正确的切入点

3.1、"execution(* com.sishuok.common.BaseService+.*())"  或者"within(com.sishuok.common.BaseService+)" 或者"this/target(com.sishuok.common.BaseService)" 有朋友会想到,既然这样,反正是对BaseService的所有子类进行匹配,那么就可以按照上边的写法,即匹配BaseService的所有实现类。这样也是可以的。

3.2、"target(com.sishuok.user.UserServiceImpl) && execution(* *())" 这样即可匹配save和saveUser两个方法。

 

从以上可以总结出:要从基类开始匹配,或者使用target直接匹配具体类。

 

对于没有接口的,直接类继承实现的,可以参考https://github.com/zhangkaitao/es/tree/master/web/src/main/java/com/sishuok/es/extra/aop

 

相关Spring AOP问题:

 

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客