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

凡科建站登录入口官方正版做物流运输网站电话

凡科建站登录入口官方正版,做物流运输网站电话,建网站需不需要服务器,3d 代做网站什么是 AOP AOP 是指通过预编译方式和运行期动态代理的方式#xff0c;在不修改源代码的情况下对程序进行功能增强的一种技术。AOP 不是面向对象编程#xff08;OOP#xff09;的替代品#xff0c;而是 OOP 的补充和扩展。它是一个新的维度#xff0c;用来表达横切问题在不修改源代码的情况下对程序进行功能增强的一种技术。AOP 不是面向对象编程OOP的替代品而是 OOP 的补充和扩展。它是一个新的维度用来表达横切问题并提供一个声明式的处理方案。AOP 是 Spring 框架中的一个重要特性。 AOP 的使用场景 AOP 的使用场景一般是在某些纵向逻辑和多个相对独立的横向逻辑中将横向逻辑进行抽象和封装使得横向逻辑不再与纵向逻辑混杂在一起使得应用程序更加易于维护和扩展。在实际开发中AOP 的使用场景比较广泛例如 日志记录在应用程序中可以通过 AOP 对方法调用进行拦截在方法调用前后记录日志信息。安全处理通过 AOP 实现安全方案例如在应用程序中对某些敏感方法添加权限验证。性能监控对应用程序进行性能监控实现性能分析和调优。事物管理通过 AOP 对事物进行管理例如实现事物的回滚和提交。缓存管理对应用程序进行缓存管理例如在读写操作中进行缓存。 AOP 的核心概念 在学习 AOP 的过程中有一些核心概念是相当重要的。 连接点JointPoint 连接点是程序中可能被拦截的方法。在 AOP 中连接点是指所有被拦截到的方法。连接点包含两个信息一个是方法的位置信息另一个是方法的名称。 切点Pointcut 切点是一组连接点的集合是要被拦截的连接点。在 Spring AOP 中切点采用 AspectJ 的切点表达式进行描述格式如 Pointcut(execution(public * com.example.demo.controller.*.*(..)))。 通知Advice 通知是指拦截到连接点后要执行的代码包括 Before、AfterReturning、AfterThrowing、After 和 Around 五种类型。 切面Aspect 切面是一个包含通知和切点的对象主要用来维护切点和通知之间的关系。 织入Weaving 织入是将切面应用到目标对象来创建新的代理对象的过程。在 Spring AOP 中织入可以在编译时、类加载时和运行时进行。 AOP 的实现方式 在 SpringBoot 中AOP 的实现方式主要有两种Java 代理JDK Proxy和字节码增强CGLIB。 Java 代理JDK Proxy Java 代理是一种基于接口的代理通过实现 Java 动态代理接口 InvocationHandler 来实现对代理类方法的调用。Java 代理只能代理实现了接口的类在运行时通过生成代理类的方式来实现。Java 代理的优点是操作简单劣势是只能代理接口。 字节码增强CGLIB 字节码增强是一种基于继承的代理通过生成代理类来完成对目标对象方法的调用。CGLIB 代理不需要实现接口对目标对象进行继承并重写其中的方法从而实现对方法的调用拦截。字节码增强的优点是能够代理非接口的类劣势是需要引入 CGLIB 依赖包。 SpringBoot AOP 的例子 我们创建一个日志切面来记录调用方法开始时间、结束时间、持续时间等(方法名、参数、返回值…)。 pom.xml引入以下依赖包 propertiesjava.version1.8/java.versionproject.build.sourceEncodingUTF-8/project.build.sourceEncodingproject.reporting.outputEncodingUTF-8/project.reporting.outputEncodingspring-boot.version2.3.7.RELEASE/spring-boot.version/propertiesdependenciesdependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter/artifactIdversion${spring-boot.version}/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactIdversion${spring-boot.version}/version/dependencydependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactIdversion${spring-boot.version}/version/dependency/dependencies定义SysLog日志注解 Target({ElementType.METHOD}) Retention(RetentionPolicy.RUNTIME) public interface SysLog {String name() default ; }定义切面 LogAspect Aspect public class LogAspect {// 定义需要被拦截的切点Pointcut(execution(public * com.example.demo.controller.*.*(..)))public void pointcut() {}// 在方法执行时进行通知Around(pointcut())public Object around(ProceedingJoinPoint joinPoint) throws Throwable {MethodSignature signature (MethodSignature) joinPoint.getSignature();Method method signature.getMethod();SysLog sysLog method.getAnnotation(SysLog.class);if (sysLog ! null) {System.out.println(日志名称 sysLog.name());}System.out.println(开始时间 LocalDateTime.now());System.out.println(执行方法 joinPoint.getSignature().getName() 前置环绕通知);Object o joinPoint.proceed();System.out.println(结束时间 LocalDateTime.now());System.out.println(执行方法 joinPoint.getSignature().getName() 后置环绕通知);return o;}// 在方法执行之前进行通知Before(pointcut())public void before(JoinPoint joinPoint) {System.out.println(执行方法 joinPoint.getSignature().getName() 前置通知);}// 在方法执行之后进行通知After(pointcut())public void after(JoinPoint joinPoint) {System.out.println(执行方法 joinPoint.getSignature().getName() 后置通知);}// 在方法执行之后返回结果时进行通知AfterReturning(returning result, pointcut pointcut())public void afterReturning(JoinPoint joinPoint, Object result) {System.out.println(执行方法 joinPoint.getSignature().getName() 返回通知返回值 result);}// 在方法抛出异常时进行通知AfterThrowing(throwing ex, pointcut pointcut())public void afterThrowing(JoinPoint joinPoint, Exception ex) {System.err.println(执行方法 joinPoint.getSignature().getName() 异常通知异常 ex.getMessage());} } 整个通知流程如下 注意如下必须注入LogAspect Bean。 Configuration public class MyConfiguration {Beanpublic LogAspect logAspect() {return new LogAspect();} }测试在Controller方法上添加SysLog(name “这是一个日志名称”)注解。 RestController() RequestMapping(user) public class UserController {SysLog(name 这是一个日志名称)GetMapping(test)public String test() {return hello world;} }测试访问 http://localhost:8080/user/test打印如下结果 日志名称这是一个日志名称 开始时间2023-07-17T16:33:11.935 执行方法 test 前置环绕通知 执行方法 test 前置通知 执行方法 test 返回通知返回值hello world 执行方法 test 后置通知 结束时间2023-07-17T16:33:11.940 执行方法 test 后置环绕通知总结 以上就是 SpringBoot AOP 的基本用法通过使用 SpringBoot AOP我们可以在不修改源代码的情况下对程序进行功能增强实现对方法的拦截、日志记录、权限验证、性能监控等功能。
http://www.dnsts.com.cn/news/22976.html

相关文章:

  • 做食物的网站襄阳网站建设八零后
  • 网站建设总结与搜索引擎营销的含义
  • 访问量大的网站带宽石家庄市建设工程有限公司
  • 肥东住房和城乡建设部网站企业网站查询系统官网
  • 写作网站的文风深圳开发网站的公司哪家好
  • 网站建设工程师招聘网站内搜索关键字
  • 产教融合平台建设网站wordpress清除无用的数据库表
  • wordpress建站说明wordpress自定义背景的插件
  • wordpress不适合做大站南京 电子商务网站
  • 如何构建成交型网站常见的网络推广方法
  • 合肥专业做网站苏宁易购网页布局设计
  • 个人网站备案多少钱网站开发计划时间
  • dw使用模板做网站教程淘宝网站怎么做会话保持的
  • 吉林市网站建设做网站申请域名空间
  • 做淘客的网站有哪些网络推广运营主要做什么
  • 重庆綦江网站制作公司电话软件开发公司推荐
  • 联通北京网站备案网站推销怎么做ppt
  • 怎样找公司做单的网站开发购物商城app需要多少钱
  • 哪个网站上做ppt比较好看怎么制作公众号模板
  • 有域名了建立免费网站wordpress 售卖插件
  • 5118站长平台某网站网站的设计与实现
  • 推广网站广告山东网站建设最便宜
  • 网站推广推广wordpress怎么发布文章到专题栏目
  • 福建省建设工程造价站官方网站cordova wordpress
  • 视频网站开发平台印度人通过什么网站做国际贸易
  • 网站的作用有哪些wordpress设置标题颜色
  • 专业网站开发企业微信的网站怎么做
  • 房产中介网站wordpress登陆插件
  • 做品牌网站哪个好点网页qq登录页面
  • 辽宁建设厅网站什么时候换的沈阳工程招标信息网