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

正品手表网站优秀电商网站设计

正品手表网站,优秀电商网站设计,宝山网站建设推广,网站加外链目录 Aspect的使用 配置 作用 通知相关的注解 例子 结果#xff1a; Aspect作用和Spring Aop关系 示例 标签表达式 Aspect的使用 配置 要启用 Spring AOP 和 Aspect 注解#xff0c;需要在 Spring 配置中启用 AspectJ 自动代理#xff0c;但是在 Spring Boot 中Aspect的使用 配置 作用 通知相关的注解 例子 结果 Aspect作用和Spring Aop关系 示例 标签表达式 Aspect的使用 配置 要启用 Spring AOP 和 Aspect 注解需要在 Spring 配置中启用 AspectJ 自动代理但是在 Spring Boot 中通常不需要显式地添加 EnableAspectJAutoProxy因为 Spring Boot 的自动配置特性已经包含了这一设置。 Configuration EnableAspectJAutoProxy public class AppConfig {// ... }Aspect 注解也要写Component或通过其他方式注册为 Spring Bean以确保 Spring 容器能够识别并管理这个切面。 Aspect Component public class LoggingAspect { } 作用 定义切面Aspect 切面是跨多个类或对象的横切关注点的模块化。在 Spring AOP 中切面是通过使用 Aspect 注解的类来表示的。 切入点Pointcut 使用 Pointcut 注解来定义切入点表达式指定切面应用的位置。切入点定义了切面应该在何处插入其横切逻辑即切面应该应用的连接点如方法执行的集合。 通知Advice 前置通知Before advice在某连接点方法执行等之前执行但这个通知不能阻止连接点之前的执行流程除非它抛出一个异常。后置通知After advice在某连接点之后执行无论该连接点是正常完成还是抛出异常。 返回后通知After-returning advice在某连接点正常完成后执行。 抛出异常后通知After-throwing advice如果方法抛出异常退出则执行通知。 环绕通知Around advice在方法调用之前和之后执行它将决定是否继续执行连接点或直接返回自己的返回值或抛出异常。 通知相关的注解 Around环绕增强: 就是既可以前置增强也可以后置增强。环绕通知会影响到AfterThrowing通知的运行,不要同时使用。  Before标识一个前置增强方法 AfterReturning后置增强如无返回结果此注解不会执行 After:final增强不管是抛出异常或者正常退出都会执行 AfterThrowing 异常抛出增强 例子 假设我们有一个服务类 SampleService我们想在其方法执行的不同阶段添加日志。 public class SampleService {public void performAction() {System.out.println(Performing action in SampleService);} }现在我们定义一个切面 LoggingAspect 来添加日志 Aspect Component public class LoggingAspect {// 前置通知在方法执行之前执行Before(execution(* SampleService.performAction(..)))public void logBefore(JoinPoint joinPoint) {System.out.println(Before executing: joinPoint.getSignature().getName());}// 后置通知在方法执行之后执行无论是否发生异常After(execution(* SampleService.performAction(..)))public void logAfter(JoinPoint joinPoint) {System.out.println(After executing: joinPoint.getSignature().getName());}// 返回后通知在方法成功执行之后执行AfterReturning(execution(* SampleService.performAction(..)))public void logAfterReturning(JoinPoint joinPoint) {System.out.println(After returning from: joinPoint.getSignature().getName());}// 异常后通知在方法抛出异常后执行AfterThrowing(pointcut execution(* SampleService.performAction(..)), throwing ex)public void logAfterThrowing(JoinPoint joinPoint, Throwable ex) {System.out.println(After throwing in: joinPoint.getSignature().getName() , Exception: ex);}// 环绕通知在方法执行之前和之后执行Around(execution(* SampleService.performAction(..)))public Object logAround(ProceedingJoinPoint joinPoint) throws Throwable {System.out.println(Around before: joinPoint.getSignature().getName());Object result joinPoint.proceed(); // 继续执行方法System.out.println(Around after: joinPoint.getSignature().getName());return result;} }结果 就Before来说只要performAction方法被调用那么第一步就是先执行这段代码System.out.println(Before executing: joinPoint.getSignature().getName());执行完后在执行performAction方法。其他方法也是如此只是触发时机不同罢了。 Aspect作用和Spring Aop关系 Aspect 是 AspectJ 框架中的一个注解它是面向切面编程AOP的一个关键部分。AspectJ 是一个独立的 AOP 框架而 Spring 框架包括 Spring Boot则集成了 AspectJ 的一部分功能使得开发者可以在 Spring 应用中方便地使用 AOP。 AOP 是一种编程范式软件工程中的一类典型的编程风格。用于增加程序的模块化通过将横切关注点如日志、安全、事务管理等从业务逻辑中分离出来提高代码的可重用性和可维护性。说白了其实我感觉就是动态代理可以为相关方法前后等统一进行一些处理。 Spring Boot 作为 Spring 框架的一个扩展继承了 Spring 的 AOP 功能。在 Spring Boot 应用中AOP 使用代理模式来实现 AOP其中 Aspect 注解的类被当作一个带有通知Advice和切入点Pointcut的切面。 Spring AOP 使用代理模式来拦截对对象的方法调用。当在 Spring 应用中定义了 AOP 切面时Spring 容器会为匹配切面指定的切入点的 Bean 创建一个代理对象。这个代理对象在调用原始方法之前或之后执行切面中定义的逻辑。 动态代理如果一个 Bean 至少实现了一个接口Spring AOP 默认会使用 JDK 的动态代理来创建这个 Bean 的代理。CGLIB 代理如果一个 Bean 没有实现任何接口Spring AOP 会使用 CGLIB 库来创建代理。 虽然使用 Aspect 注解和 Before、After 等注解定义了切面的行为但这些注解本身并不负责拦截方法调用。真正的方法拦截是由 Spring AOP 在背后通过动态代理机制来实现的。当方法被调用时实际上是先调用代理对象的对应方法代理对象再根据 AOP 配置来决定是否调用原始对象的方法以及在调用前后执行哪些额外的逻辑。 示例 假设有一个简单的服务类 MyService我们想在其 performAction 方法执行前后添加日志 public class MyService {public void performAction() {System.out.println(Performing action);} }Aspect Component public class LoggingAspect {Before(execution(* MyService.performAction(..)))public void logBefore() {System.out.println(Before action);}After(execution(* MyService.performAction(..)))public void logAfter() {System.out.println(After action);} }在这里LoggingAspect 定义了在 MyService 的 performAction 方法执行前后要执行的日志操作。但实际上当 performAction 方法被调用时它是通过 MyService 的代理来调用的代理负责根据 LoggingAspect 的配置执行相应的 AOP 逻辑。 发现通知参数中的joinPoint不知道做什么用请看我的下一章 Springboot注解Aspect二JoinPoint 使用详解 标签表达式 上述例子中你会好奇 Before(execution(* SampleService.performAction(..)))这中间的execution是什么意思后面括号内是什么意思。这其实是注解使用的标签表达式有如下这些 within用于匹配指定类型内的方法执行 this用于匹配当前AOP代理对象类型的执行方法注意是AOP代理对象的类型匹配这样就可能包括引入接口也* 类型匹配 target用于匹配当前目标对象类型的执行方法注意是目标对象的类型匹配这样就不包括引入接口也类型匹配 args用于匹配当前执行的方法传入的参数为指定类型的执行方法 within用于匹配所以持有指定注解类型内的方法 target用于匹配当前目标对象类型的执行方法其中目标对象持有指定的注解和annotation区别是不用全路径 args用于匹配当前执行的方法传入的参数持有指定注解的执行 annotation用于匹配当前执行方法持有指定注解的方法 主要记住execution和annotation用的比较多一个是用在方法上一个是用在相关注解上 如何编写切入点表达式 匹配特定方法execution([权限加返回类型] [类路径].[方法名称]([参数])) 匹配带有特定注解的方法annotation(com.example.MyAnnotation) 匹配所有被 MyAnnotation 注解的方法。 其中 (..)代表所有参数 (*String)代表第一个参数为任何值,第二个为String类型 (..,String)代表最后一个参数是String类型 发现通知参数中的joinPoint不知道做什么用请看我的下一章 Springboot注解Aspect二JoinPoint 使用详解 ------------------------------------------与正文内容无关------------------------------------ 如果觉的文章写对各位读者老爷们有帮助的话麻烦点赞加关注呗作者在这拜谢了! 混口饭吃了如果你需要Java 、Python毕设、商务合作、技术交流、就业指导、技术支持度过试用期。请在关注私信我本人看到一定马上回复
http://www.dnsts.com.cn/news/183481.html

相关文章:

  • 企业网站排名要怎么做wordpress教程 ppt
  • 服装网站建设视频建立网站的三种方式
  • 网站网页设计收费手机上使用wordpress
  • 网站icon图标怎么加如何做网课网站
  • 有什么网站可以做投票功能宁夏银川冰面出现人脸
  • 专业的魔站建站系统订餐网站开发流程
  • 巴中市网站建设好的设计师网站有哪些
  • 做黑彩网站dedecms网站空白
  • 案例上海网站西安网站建设云阔网络熊掌号
  • 设计师联盟网站东莞城建局官网
  • 工程公司排名百度seo分析工具
  • 做网站的软件叫什么软件天津网站建设服务电话
  • 手机网站建设优化软件做h的小说网站有哪些
  • 搬家公司网站制作看一个网站是用什么语言做的
  • 怎样用ps做企业网站金安合肥网站建设专业
  • 项目经理网站开发流程沈阳住房城乡建设部网站
  • 网站邮件功能设计理论具有价值的专业网站建设平台
  • 网站开发后期工作包括那两个部分网站服务器权限
  • 移动商城网站开发wordpress js放到oss
  • 网站的大量图片存储格式江苏专业网站推广公司哪家好
  • 西安+医疗网站建设电影手机网站建设
  • 皖icp网站建设2022年最新血糖标准权威发布
  • 网站建设与管理实践收获怎么写怎样做淘宝客网站
  • 怎么用网站做调查表品牌名的选取方法
  • 阿里巴巴如何做网站内部网站搭建
  • 互联科技 行业网站怎么找网站
  • 深圳做网站公司排名ui设计需要学哪些内容
  • 浙江舟山城乡建设网站社保网站上20号做的新增
  • 广州网站关键字优化中国建设银行复核网站
  • 网站小视频怎么做的智能小程序开发哪家好