当前位置: 首页 > wzjs >正文

网站管理助手4.0网站做的文字乱码

网站管理助手4.0,网站做的文字乱码,企业门户网站的建设费用,深圳网站备案拍照点Spring AOP 切点表达式(Pointcut Expression) 一、切点表达式概述 切点表达式 是 Spring AOP 用于定义哪些方法(或连接点)需要被拦截的规则,主要基于 AspectJ 切点表达式语言。Spring AOP 仅支持方法级别的切点&#…

Spring AOP 切点表达式(Pointcut Expression)


一、切点表达式概述

切点表达式 是 Spring AOP 用于定义哪些方法(或连接点)需要被拦截的规则,主要基于 AspectJ 切点表达式语言。Spring AOP 仅支持方法级别的切点(相比 AspectJ 的字段、构造器等更广泛支持),通过表达式指定目标方法,结合通知(Advice)实现横切逻辑。

  • 作用:精确匹配需要应用切面逻辑的方法。
  • 使用场景:日志记录、事务管理、权限检查等。
  • 表达式解析器:Spring AOP 使用 AspectJ 的切点表达式解析器(需要 spring-aspects 依赖)。

二、切点表达式语法

AspectJ 切点表达式的通用语法为:

execution(modifiers-pattern? return-type-pattern declaring-type-pattern? method-name-pattern(param-pattern) throws-pattern?)
  • modifiers-pattern(可选):方法修饰符,如 publicprivate
  • return-type-pattern:方法返回值类型,如 void*(任意类型)。
  • declaring-type-pattern(可选):声明方法的类或包,如 com.example.service.*
  • method-name-pattern:方法名称模式,如 add*
  • param-pattern:方法参数模式,如 (…)(任意参数)。
  • throws-pattern(可选):异常类型,如 throws IOException

通配符:

  • *:匹配任意字符(用于方法名、类名、返回值等)。
  • :匹配任意数量的参数或包路径。
  • +:匹配指定类及其子类。

三、常用切点表达式关键字

Spring AOP 主要支持以下 AspectJ 切点指示符(Pointcut Designators):

  1. execution
    • 匹配方法执行的连接点,是 Spring AOP 最常用的切点指示符。
    • 示例:
      • execution(* com.example.service.*.*(…)):匹配 com.example.service 包下所有类的所有方法,任意返回值,任意参数。
      • execution(public void com.example.UserService.add*(…)):匹配 UserService 类中以 add 开头的公共方法,返回值为 void
      • execution(* com.example…*.*(String, int)):匹配 com.example 包及其子包下所有类的接收 Stringint 参数的方法。
  2. within
    • 匹配指定类型或包内的所有方法。
    • 示例:
      • within(com.example.service.*):匹配 com.example.service 包下所有类的所有方法。
      • within(com.example…*):匹配 com.example 包及其子包下所有类的所有方法。
  3. @annotation
    • 匹配带有特定注解的方法。
    • 示例:
      • @annotation(org.springframework.transaction.annotation.Transactional):匹配带有 @Transactional 注解的方法。
      • @annotation(com.example.MyCustomAnnotation):匹配带有自定义注解的方法。
  4. args
    • 匹配方法参数类型。
    • 示例:
      • args(String, …):匹配第一个参数为 String 的方法,后面参数任意。
      • args(String, int):匹配参数严格为 (String, int) 的方法。
  5. this
    • 匹配代理对象的类型(通常是接口类型或类类型)。
    • 示例:
      • this(com.example.UserService):匹配代理对象是 UserService 类型的连接点。
  6. target
    • 匹配目标对象的类型。
    • 示例:
      • target(com.example.UserService):匹配目标对象是 UserService 类型的连接点。
  7. @target
    • 匹配目标对象带有特定注解的类型。
    • 示例:
      • @target(org.springframework.stereotype.Service):匹配带有 @Service 注解的类中的方法。
  8. @args
    • 匹配方法参数带有特定注解的场景。
    • 示例:
      • @args(com.example.MyAnnotation):匹配方法参数带有 @MyAnnotation 注解的方法。
  9. bean(Spring 特有):
    • 匹配特定 Spring Bean 名称。
    • 示例:
      • bean(userService):匹配 ID 为 userService 的 Bean 的所有方法。
      • bean(*Service):匹配以 Service 结尾的 Bean 的所有方法。

四、切点表达式的组合

切点表达式可以通过逻辑运算符组合,增强匹配灵活性:

  • &&(与):两个条件都满足。
    • **示例:execution(* com.example.service.*.*(…)) && @annotation(org.springframework.transaction.annotation.Transactional) **
      • 匹配 com.example.service 包下带有 @Transactional 注解的方法。
  • ||(或):任一条件满足。
    • **示例:**execution(* com.example.service.*.*(…)) || execution(* com.example.controller.*.*(…))
      • 匹配 servicecontroller 包下的方法。
  • !(非):取反。
    • **示例:**execution(* com.example.service.*.*(…)) && !execution(* com.example.service.UserService.*(…))
      • 匹配 service 包下除 UserService 类之外的所有方法。

五、常用切点表达式示例

以下是一些常见的切点表达式及其用途:

  1. 匹配所有方法
    java

    execution(* *.*(..))
    
    • 匹配所有类的所有方法,任意返回值,任意参数。
  2. 匹配特定包下所有方法
    java

    execution(* com.example.service.*.*(..))
    
    • 匹配 com.example.service 包下所有类的所有方法。
  3. 匹配特定类的方法
    java

    execution(* com.example.UserService.*(..))
    
    • 匹配 UserService 类中的所有方法。
  4. 匹配特定方法名前缀
    java

    execution(* com.example.UserService.add*(..))
    
    • 匹配 UserService 类中以 add 开头的方法。
  5. 匹配特定返回值类型
    java

    execution(String com.example.*.*(..))
    
    • 匹配 com.example 包下返回值类型为 String 的方法。
  6. 匹配特定参数类型
    java

    execution(* com.example.*.*(String, int))
    
    • 匹配参数类型为 (String, int) 的方法。
  7. 匹配注解方法
    java

    @annotation(org.springframework.web.bind.annotation.GetMapping)
    
    • 匹配带有 @GetMapping 注解的 Controller 方法。
  8. 匹配特定 Bean
    java

    bean(userService)
    
    • 匹配 ID 为 userService 的 Bean 的所有方法。
  9. 匹配子包
    java

    within(com.example..*)
    
    • 匹配 com.example 包及其子包下所有类的所有方法。

六、切点表达式的配置方式

**1. **XML 配置

在 XML 中通过 aop:pointcut 定义切点:

xml

<aop:config><aop:aspect id="logAspect" ref="loggingAspect"><aop:pointcut id="logPointcut" expression="execution(* com.example.service.*.*(..))"/><aop:before pointcut-ref="logPointcut" method="logBefore"/></aop:aspect>
</aop:config>

**2. **注解配置

使用 @Pointcut 注解定义切点:

java

@Aspect
@Component
public class LoggingAspect {@Pointcut("execution(* com.example.service.*.*(..))")public void logPointcut() {}@Before("logPointcut()")public void logBefore() {System.out.println("Before method execution");}
}
  • @Pointcut 方法通常为空,仅用于定义切点,供其他通知引用。
  • 确保启用 AOP 注解支持:@EnableAspectJAutoProxy**。**

七、注意事项

  1. 精确性
    • 切点表达式应尽量精确,避免匹配过多无关方法,影响性能。
    • 例如,execution(* *.*(…)) 过于宽泛,可能导致不必要的代理开销。
  2. Spring AOP 限制
    • 仅支持方法级别的切点,无法拦截字段访问或构造器。
    • 内部方法调用(this.method())不会触发代理,切面逻辑可能失效。
  3. 性能考虑
    • 复杂的切点表达式或大量匹配方法可能增加解析和代理开销。
    • 使用 beanwithin 限制范围以提高效率。
  4. 调试技巧
    • 使用日志或调试工具验证切点匹配的方法。
    • 确保表达式语法正确,错误表达式会导致匹配失败。
  5. 依赖
    • 注解方式需要 spring-aspects 依赖:
      xml

      <dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>${spring.version}</version>
      </dependency>
      

八、总结

切点表达式 是 Spring AOP 的核心,用于定义需要拦截的方法。基于 AspectJ 表达式语言,Spring AOP 提供灵活的匹配规则,常用关键字包括 executionwithin@annotationbean 等。通过 &&||! 组合表达式,可以实现复杂的匹配逻辑。

核心要点:

  • 语法execution(modifiers? return-type declaring-type? method-name(param) throws?)
  • 常用指示符
    • execution:匹配方法签名。
    • within:匹配类或包。
    • @annotation:匹配注解方法。
    • bean:匹配特定 Spring Bean。
  • 组合方式:使用 &&||! 实现复杂匹配。
  • 配置方式:XML(aop:pointcut)或注解(@Pointcut)。
  • 注意事项:确保表达式精确、注意 Spring AOP 的方法级别限制、优化性能。

文章转载自:

http://7niurf2X.kjmws.cn
http://7YWmvWI6.kjmws.cn
http://aFql6lLi.kjmws.cn
http://htcbFq30.kjmws.cn
http://4XtWmKSo.kjmws.cn
http://WhFF3Rwc.kjmws.cn
http://dRjAaK78.kjmws.cn
http://h5SeMfwr.kjmws.cn
http://1N4xkoH9.kjmws.cn
http://ZTOcTW1a.kjmws.cn
http://epOBZZT2.kjmws.cn
http://aEsJgGpe.kjmws.cn
http://cKTMQBwA.kjmws.cn
http://79SL5FaY.kjmws.cn
http://0AqxoBtZ.kjmws.cn
http://CgaoFjPX.kjmws.cn
http://Is1LAne5.kjmws.cn
http://aA3MfjkR.kjmws.cn
http://bEB9FHpY.kjmws.cn
http://PJGV7Eii.kjmws.cn
http://ycu1Pr7T.kjmws.cn
http://3kdqGsdX.kjmws.cn
http://YTXNSiNi.kjmws.cn
http://8uw9RZ8F.kjmws.cn
http://r2n29XYU.kjmws.cn
http://FFg5Ly98.kjmws.cn
http://JnvB4evl.kjmws.cn
http://3Wqv5sK2.kjmws.cn
http://NuJFQcEl.kjmws.cn
http://4SB0v6yb.kjmws.cn
http://www.dtcms.com/wzjs/688863.html

相关文章:

  • 网站开发教程视频10大品牌网
  • 福鼎手机网站建设昆明网站建设公司_
  • 手机网站开发服务国外vi设计网站
  • 浙江住房和城乡建设厅报名网站东莞微客巴巴做网站
  • 做企业网站需要买什么廊坊seo排名优化
  • 惠普网站建设的目标宁波电器网站制作
  • 专业网站建设费用包括哪些淄博张店网站排名优化
  • 襄阳网站设计制作公司标志设计ppt
  • 襄阳市做网站wordpress模板友情链接添加
  • 网站建设中翻译金汇网站建设
  • 东莞房地产网站建设icp备案网站名称更改
  • 郑州外贸营销网站建设高端网站建设需要的人员配备
  • 东营外贸型网站设计房地产十大排名
  • 高端网站有哪些优势公司简历怎么写模板
  • 北京建设大学官方网站如何下载wordpress插件之前的版本
  • 英文网站案例涂鸦智能深圳分公司
  • 网站建设包括哪些知识SEO网站布局优化
  • 南昌网站建设模板服务商济南网站seo哪家公司好
  • 网站首页添加代码网站建设设计文档模板下载
  • 郑州网站建设扌汉狮网络dj那个网站做的好
  • 昆明网站建设价位wordpress文章幻灯片
  • 做暧暧视频免费视频网站跑纸活做网站
  • 买了个域名 如何自己做网站wordpress 博客登陆
  • 电子商务网站建设与管理课后习题四川seo关键词工具
  • 长春求推荐好的网站优化推广莆田网站开发公司电话
  • 做网站为什么要服务器广州网站制作选哪家
  • 好的网站建设商家seo快速排名服务
  • 响应式网站设计软件国外域名注册
  • 路桥做网站网站程序开发技术
  • 做网站预付款 怎么做账做的好的网站