首页 > 其他分享 >Spring框架学习之ICO、AOP详解及实战案例

Spring框架学习之ICO、AOP详解及实战案例

时间:2024-10-03 14:18:30浏览次数:3  
标签:ICO 连接点 Spring AOP 切面 通知 注解

Spring框架学习

一、IOC

IOC是SpringFramework核心,简单理解就是bean容器,也就是说代码中不需要new()来创建实例了,IOC启动的时候就帮你装载好了,你只需要@Autowired引入即可使用。
Spring Bean生命周期

1.1 Spring Bean生命周期

img

1.2 Spring IOC扩展点

img

二、AOP

AOP(Aspect Oriented Programming) 即面向切面编程,是OOP(Object Oriented Programming、面向对象编程)的一个延续,是OOP的一个进阶。

大白话就是:

将一些通用的逻辑集中实现,然后通过 AOP 进行逻辑的切入,减少了零散的碎片化代码,提高了系统的可维护性。

具体是含义可以理解为:通过代理的方式,在调用想要的对象方法时候,进行拦截处理,执行切入的逻辑,然后再调用真正的方法实现。

2.1 基本概念

关于Spring AOP的一些术语

  • 切面(Aspect):在Spring AOP中,切面可以使用通用类或者在普通类中以@Aspect 注解(@AspectJ风格)来实现

  • 连接点(Joinpoint):在Spring AOP中一个连接点代表一个方法的执行

  • 通知(Advice):在切面的某个特定的连接点(Joinpoint)上执行的动作。通知有各种类型,其中包括"around"、"before”和"after"等通知。许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链

  • 切入点(Pointcut):定义出一个或一组方法,当执行这些方法时可产生通知,Spring缺省使用AspectJ切入点语法。

通知类型

  • 前置通知(@Before):在某连接点(join point)之前执行的通知,但这个通知不能阻止连接点前的执行(除非它抛出一个异常)

  • 返回后通知(@AfterReturning):在某连接点(join point)正常完成后执行的通知:例如,一个方法没有抛出任何异常,正常返回

  • 抛出异常后通知(@AfterThrowing):方法抛出异常退出时执行的通知

  • 后通知(@After):当某连接点退出的时候执行的通知(不论是正常返回还是异常退出)

  • 环绕通知(@Around):包围一个连接点(join point)的通知,如方法调用。这是最强大的一种通知类型,环绕通知可以在方法调用前后完成自定义的行为,它也会选择是否继续执行连接点或直接返回它们自己的返回值或抛出异常来结束执行。

2.2 使用场景
  • 权限管理

    • 方案详述:在@ControllerAdvice里边,处理全局请求,控制权限。
    • 权限管理的其他方案:(除了AOP之外的方案)
      • 在过滤器或者拦截器中处理
      • 使用Shiro中间件
  • 异常处理

    • 情景1:在@ControllerAdvice里边,处理全局异常
    • 情景2:将Dubbo接口作为切面,统一处理Dubbo接口里边的异常
  • 操作日志

    • 情景1:按产品的需求,有的接口需要记录操作日志
      • 自定义注解,需要记录操作日志的,则在Controller的方法上加此注解
      • AOP中判断,如果有这个自定义注解,则将参数异步写到日志数据库
  • 将数据同步到ES

    • 情景1:增删改数据时,同时要处理MySQL和ES
    • 将相关类作为切面,若数据库提交,则写到ES;若回滚,则不写到ES
  • 事务控制

    • 情景1:使用Spring的@Transactional
2.3 日志实例展示
2.3.1、新建注解类
package com.ywj.log;
 
import java.lang.annotation.*;

@Target({ElementType.PARAMETER, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface SystemCrmlog {
    /**
     * 日志描述
     * 进行了什么操作
     */
    String value()  default "";
 

2.3.2、定义切面类
@Slf4j
@Aspect
@Component
public class SystemLogAspect {
 
 
    /**
     * 注解Pointcut切入点
     * 定义出一个或一组方法,当执行这些方法时可产生通知
     * 指向你的切面类方法
     * 由于这里使用了自定义注解所以指向你的自定义注解
     */
    @Pointcut("@annotation(com.ywj.log.SystemCrmlog)")
    public void log() {
    }

    @Before(value = "log()")
    public  void doBefore(JoinPoint joinPoint ){

        log.info("{}::{}执行前。。。。。参数:{}。。。。。。。。。。",
            joinPoint.getSignature().getDeclaringTypeName(),
            joinPoint.getSignature().getName(),
            Arrays.toString(joinPoint.getArgs())
        );
    }

}
2.3.3、注解使用

代码中@SystemCrmlog注解即可

标签:ICO,连接点,Spring,AOP,切面,通知,注解
From: https://blog.csdn.net/u011314083/article/details/142690268

相关文章

  • 美容院管理智能化:SpringBoot系统开发实战
    第四章系统设计设计一个系统不单单是设计系统的页面,可以说系统设计其本质是一个结合了众多设计过程的比较复杂的系统工程。一般来说,在完成系统设计时,需要了解和掌握很多设计的知识,有界面布局技术的知识,页面采用的字体和颜色的运用,还有页面空白的规范使用等,如何将这些元素......
  • SpringBoot美容院管理系统:开发者指南
    第三章系统分析提前通过各种渠道,比如图书馆,电脑上的网站等渠道获取跟本系统有关联的资料,同时设计调查问卷,让系统的使用者参与调查,了解其对系统的需求,然后进行系统的分析,确定本系统的开发可行性,确定本系统的功能等内容。3.1可行性分析这部分内容主要从开发的角度和运行使......
  • Java毕业设计:基于Springboo汽车故障维修预约网站毕业设计源代码作品和开题报告
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • 【开题报告】基于Springboot+vue农村住宅房屋信息管理应用系统(程序+源码+论文) 计算机
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着农村经济的快速发展和城乡一体化进程的加速推进,农村住宅房屋作为农村居民生活与生产的重要载体,其管理效率与信息化水平日益成为影响农村现代化建......
  • SpringBootWeb
    入门创建SpringBoot工程,勾选web开发相关依赖。packagecom.example;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RestController;@RestController//这个注解是用来将一个类声明为一个控制器,并将其中的方......
  • springboot实战项目-寰宇外卖重难点总结
    思考前端和后端的请求地址不同,前端发送的请求,是如何请求到后端服务的?可以通过nginx反向代理将前端发送的动态请求由nginx转发到后端服务。nginx其他优点:1.提高访问速度。2.进行负载均衡。3.安全性高,保护后端服务安全。nginx负载均衡策略:1.轮询(默认):按时间顺序依次将请求分发......
  • Spring Boot技术栈在交流平台设计中的应用
    1绪论1.1研究背景在当今的社会,可以说是信息技术的发展时代,在社会的方方面面无不涉及到各种信息的处理。信息是人们对客观世界的具体描述,是人们进行交流与联系的重要途径。人类社会就处在一个对信息进行有效合理的加工中[3]。它将促进整个社会的发展。随着社会信息技术的......
  • Spring 5基础
    Spring5基础spring是一个轻量级的,非入侵式的框架控制反转(IOC),面向切面编程(AOP)1.IOC推导packagecom.jf.dao;publicinterfaceUserDao{voidgetUser();}packagecom.jf.dao;publicclassUserDaoImplimplementsUserDao{@Overridepublicvoid......
  • 跨域问题(普通跨域和springsecurity跨域)
    跨域问题老生常谈了,前后端分离项目会用到,浏览器端的请求需要ip,协议,端口完全一直否则浏览器会拦截普通:packagecom.example.openai.config;importorg.springframework.context.annotation.Configuration;importorg.springframework.web.servlet.config.annotation.Cor......
  • SpringSecurity自定义失败处理
    认证异常处理@ComponentpublicclassRenzhengimplementsAuthenticationEntryPoint{@Overridepublicvoidcommence(HttpServletRequesthttpServletRequest,HttpServletResponsehttpServletResponse,AuthenticationExceptione)throwsIOException,Servlet......