Javaweb之SpringBootWeb案例之切入点表达式的详细解析

这篇具有很好参考价值的文章主要介绍了Javaweb之SpringBootWeb案例之切入点表达式的详细解析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

3.3 切入点表达式

从AOP的入门程序到现在,我们一直都在使用切入点表达式来描述切入点。下面我们就来详细的介绍一下切入点表达式的具体写法。

切入点表达式:

  • 描述切入点方法的一种表达式

  • 作用:主要用来决定项目中的哪些方法需要加入通知

  • 常见形式:

    1. execution(……):根据方法的签名来匹配

    2. Javaweb之SpringBootWeb案例之切入点表达式的详细解析,Web,java,开发语言,spring boot,spring

    1. @annotation(……) :根据注解匹配

    2. Javaweb之SpringBootWeb案例之切入点表达式的详细解析,Web,java,开发语言,spring boot,spring

首先我们先学习第一种最为常见的execution切入点表达式。

3.3.1 execution

execution主要根据方法的返回值、包名、类名、方法名、方法参数等信息来匹配,语法为:

execution(访问修饰符?  返回值  包名.类名.?方法名(方法参数) throws 异常?)

其中带?的表示可以省略的部分

  • 访问修饰符:可省略(比如: public、protected)

  • 包名.类名: 可省略

  • throws 异常:可省略(注意是方法上声明抛出的异常,不是实际抛出的异常)

示例:

@Before("execution(void com.itheima.service.impl.DeptServiceImpl.delete(java.lang.Integer))")

可以使用通配符描述切入点

  • * :单个独立的任意符号,可以通配任意返回值、包名、类名、方法名、任意类型的一个参数,也可以通配包、类、方法名的一部分

  • .. :多个连续的任意符号,可以通配任意层级的包,或任意类型、任意个数的参数

切入点表达式的语法规则:

  1. 方法的访问修饰符可以省略

  2. 返回值可以使用*号代替(任意返回值类型)

  3. 包名可以使用*号代替,代表任意包(一层包使用一个*

  4. 使用..配置包名,标识此包以及此包下的所有子包

  5. 类名可以使用*号代替,标识任意类

  6. 方法名可以使用*号代替,表示任意方法

  7. 可以使用 * 配置参数,一个任意类型的参数

  8. 可以使用.. 配置参数,任意个任意类型的参数

切入点表达式示例

  • 省略方法的修饰符号

    execution(void com.itheima.service.impl.DeptServiceImpl.delete(java.lang.Integer))
  • 使用*代替返回值类型

    execution(* com.itheima.service.impl.DeptServiceImpl.delete(java.lang.Integer))
  • 使用*代替包名(一层包使用一个*

    execution(* com.itheima.*.*.DeptServiceImpl.delete(java.lang.Integer))
  • 使用..省略包名

    execution(* com..DeptServiceImpl.delete(java.lang.Integer))    
  • 使用*代替类名

    execution(* com..*.delete(java.lang.Integer))   
  • 使用*代替方法名

    execution(* com..*.*(java.lang.Integer))   
  • 使用 * 代替参数

    execution(* com.itheima.service.impl.DeptServiceImpl.delete(*))
  • 使用..省略参数

    execution(* com..*.*(..))

注意事项:

  • 根据业务需要,可以使用 且(&&)、或(||)、非(!) 来组合比较复杂的切入点表达式。

    execution(* com.itheima.service.DeptService.list(..)) || execution(* com.itheima.service.DeptService.delete(..))

切入点表达式的书写建议:

  • 所有业务方法名在命名时尽量规范,方便切入点表达式快速匹配。如:查询类方法都是 find 开头,更新类方法都是update开头

    //业务类
    @Service
    public class DeptServiceImpl implements DeptService {
        
        public List<Dept> findAllDept() {
           //省略代码...
        }
        
        public Dept findDeptById(Integer id) {
           //省略代码...
        }
        
        public void updateDeptById(Integer id) {
           //省略代码...
        }
        
        public void updateDeptByMoreCondition(Dept dept) {
           //省略代码...
        }
        //其他代码...
    }
    //匹配DeptServiceImpl类中以find开头的方法
    execution(* com.itheima.service.impl.DeptServiceImpl.find*(..))
  • 描述切入点方法通常基于接口描述,而不是直接描述实现类,增强拓展性

    execution(* com.itheima.service.DeptService.*(..))
  • 在满足业务需要的前提下,尽量缩小切入点的匹配范围。如:包名匹配尽量不使用 ..,使用 * 匹配单个包文章来源地址https://www.toymoban.com/news/detail-834321.html

    execution(* com.itheima.*.*.DeptServiceImpl.find*(..))

到了这里,关于Javaweb之SpringBootWeb案例之切入点表达式的详细解析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ETF场内基金:AI量化投资最佳切入点(数据篇)

    原创文章第77篇,专注“个人成长与财富自由、世界运作的逻辑, AI量化投资”。 关于量化的基础知识,前面说得差不多了。 后面要开始实战。 量化的细分市场很多,如下图所示: 再从风险收益来看,从基金到加密货币,从“保守”到“激进”。 这里指的保守,当然是“主

    2024年01月21日
    浏览(54)
  • Javaweb之SpringBootWeb案例新增部门的详细解析

    2.3 删除部门 查询部门的功能我们搞定了,下面我们开始完成 删除部门 的功能开发。 2.3.1 需求 点击部门列表后面操作栏的 \\\"删除\\\" 按钮,就可以删除该部门信息。 此时,前端只需要给服务端传递一个ID参数就可以了。 我们从接口文档中也可以看得出来。 2.3.2 接口文档 删除部

    2024年01月21日
    浏览(49)
  • Javaweb之SpringBootWeb案例开发规范的详细解析

    1.2 开发规范 了解完需求也完成了环境搭建了,我们下面开始学习开发的一些规范。 开发规范我们主要从以下几方面介绍: 1、开发规范-REST 我们的案例是基于当前最为主流的前后端分离模式进行开发。 在前后端分离的开发模式中,前后端开发人员都需要根据提前定义好的接

    2024年02月02日
    浏览(46)
  • 【JavaWeb后端开发-第六章(2)】SpringBootWeb案例

    前面我们已经实现了员工信息的条件分页查询以及删除操作。 关于员工管理的功能,还有两个需要实现:     ♦ 新增员工     ♦ 修改员工     首先我们先完成\\\"新增员工\\\"的功能开发,再完成\\\"修改员工\\\"的功能开发。而在\\\"新增员工\\\"中,需要添加头像,而头像需

    2024年01月16日
    浏览(53)
  • 【JavaWeb后端开发-第六章(1)】SpringBootWeb案例

         前面我们已经讲解了Web前端开发的基础知识,也讲解了Web后端开发的基础(HTTP协议、请求响应),并且也讲解了数据库MySQL,以及通过Mybatis框架如何来完成数据库的基本操作。 那接下来,我们就通过一个案例,来将前端开发、后端开发、数据库整合起来。 而这个案例

    2024年02月02日
    浏览(54)
  • [JavaWeb]【九】web后端开发-SpringBootWeb案例(菜单)

    目录 一、准备工作 1.1 需求 1.2 环境搭建 1.2.1 准备数据库表  1.2.2 创建springboot工程 1.2.3 配置application.properties 准备对应实体类  1.2.3.1 application.properties  1.2.3.2 实体类  1.2.3.2.1 Emp类  1.2.3.2.2 Dept类 1.2.4 准备对应的Mapper、Service(接口实现类)、Controller基础结构 1.2.4.1 Mapper

    2024年02月11日
    浏览(49)
  • 【JavaWeb后端开发-第六章(3)】SpringBootWeb案例—登录认证

        在前面的章节中,我们已经实现了 部门管理 、 员工管理 的基本功能,但是大家会发现,我们并没有登录,就直接访问到了Tlias智能学习辅助系统的后台。 这是不安全的,所以我们今天的主题就是 登录认证 。 最终我们要实现的效果就是用户必须登录之后,才可以访

    2024年01月19日
    浏览(52)
  • 【JavaWeb后端开发-第六章(4)】SpringBootWeb案例—事务&AOP

        在数据库阶段我们已学习过事务了,我们讲到:      事务 是一组操作的集合,它是一个不可分割的工作单位。事务会把所有的操作作为一个整体,一起向数据库提交或者是撤销操作请求。所以这组操作要么同时成功,要么同时失败。     怎么样来控制这组

    2024年01月19日
    浏览(54)
  • Javaweb之SpringBootWeb案例之AOP核心概念的详细解析

    2.3 AOP核心概念 通过SpringAOP的快速入门,感受了一下AOP面向切面编程的开发方式。下面我们再来学习AOP当中涉及到的一些核心概念。 1. 连接点:JoinPoint ,可以被AOP控制的方法(暗含方法执行时的相关信息) 连接点指的是可以被aop控制的方法。例如:入门程序当中所有的业务

    2024年02月21日
    浏览(49)
  • Javaweb之SpringBootWeb案例员工管理分页查询的详细解析

    完成了部门管理的功能开发之后,我们进入到下一环节员工管理功能的开发。 基于以上原型,我们可以把员工管理功能分为: 分页查询(今天完成) 带条件的分页查询(今天完成) 删除员工(今天完成) 新增员工(后续完成) 修改员工(后续完成) 那下面我们就先从分页

    2024年01月15日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包