Spring AOP 原理

本文介绍 Spring AOP 的核心概念如切面、连接点等,并演示如何通过配置 XML 实现前置通知、后置通知、环绕通知及异常通知。

Spring AOP 原理
  原理:一种编程技术,用来在系统中提升业务分离
  AOP术语
    1、Aspect切面
      实现的交叉功能
    2、JoinPoint 连接点
      应用程序执行过程中插入切面的地点
    3、Advice 通知
      通知某个切入点执行的代码
    4、Point cut 切入点
      定义了通知应该用在哪些的连接点
    5、Instroduction 引入
      允许已存在类添加的新方法和属性
    6、Target 目标对象
      被通知的对象
    7、Proxy 代理
      AOP框架创建对象,用来实现切面契约,包括通知方法执行等功能,将通知应用到目标对象后创建的对象
    8、 Weaving 织入
      将切面应用到目标对象从而创建一个新的代理对象过程
  相关驱动包
    aspectjweaver.jar
    aspectjrt.jar
  创建通知
    1、Before 前置通知
      public void before(Method arg0, Object[] arg1, Object arg2)
        throws Throwable {
      System.out.println("执行了:"+arg0.getClass().toString()+"目标类");
        System.out.println("执行了:"+arg2.getClass().getName()+"该类");
        System.out.println("执行了:"+arg0.getName()+"()方法");
        for(Object object : arg1){
          System.out.println("参数为:"+object);
        }
        System.out.println("前置通知");
      }
      备注:实现的接口为
        import org.springframework.aop.MethodBeforeAdvice;
    2、After 后置通知
      public void afterReturning(Object arg0, Method arg1, Object[] arg2,
        Object arg3) throws Throwable {
      System.out.println("执行了:"+arg1.getClass().toString()+"类");
        System.out.println("执行了"+arg1.getName()+"()方法");
        for(Object object : arg2){
          System.out.println("参数为:"+object);
        }
        System.out.println("后置通知");
      }
      备注:实现的接口
        import org.springframework.aop.AfterReturningAdvice;
    3、Round 环绕通知
      public Object invoke(MethodInvocation arg0) throws Throwable {
        System.out.println("前置通知2222222222");
        System.out.println("执行了:"+arg0.getThis().getClass()+"类");
        System.out.println("执行了:"+arg0.getMethod().getName()+"()方法");
        Object [] object =arg0.getArguments();
        for(Object ob: object){
          System.out.println("参数为:"+ob+"");
        }
        Object obj = arg0.proceed();
        System.out.println("后置通知2222222222");
        return obj;
      }
      备注:要实现的接口
        import org.aopalliance.intercept.MethodInterceptor;
    4、异常通知
      public void afterThrowing(Throwable t){
        System.out.println("抛出了"+t.getMessage()+"异常");
      }
      备注:实现的接口
        import org.springframework.aop.ThrowsAdvice;
  配置 ApplicationContext.xml
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:aop="http://www.springframework.org/schema/aop"
      xmlns:tx="http://www.springframework.org/schema/tx"
      xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
        http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd"
        >
      <!--人 (目标对象) -->
      <bean id="shopingMan" class="com.lovo.spring1.PeopleImp"></bean>
      <!-- 购物(通知对象) -->
      <bean id="myadvice" class="com.lovo.spring1.SpringProxyAOP"></bean>
      <!-- 工具(切面) -->
      <bean id="myInterceptor" class="org.springframework.aop.support.RegexpMethodPointcutAdvisor">
        <!-- 在该切面上加入哪个通知 -->
        <property name="advice" ref="myadvice"></property>
        <!-- 哪些类需要进行注入通知 -->
        <property name="patterns" value="com.lovo.spring1.*.*"></property>
      </bean>
      <!-- 定义代理 -->
      <bean id="proxy" abstract="true"  class="org.springframework.aop.framework.ProxyFactoryBean" >
        <!-- 定义当前目标对象,需要使用哪些切面 -->
        <property name="interceptorNames">
        <list>
        <value>myInterceptor</value>
        </list>
        </property>
      </bean>
      <!-- 物品(指明具体做哪个类的代理) -->
      <bean id="info" parent="proxy">
        <property name="target" ref="shopingMan"></property>
      </bean>
    </beans>

消息 优快云首页 发布文章 【数据驱动】【航空航天结构的高效损伤检测技术】一种数据驱动的结构健康监测(SHM)方法,用于进行原位评估结构健康状态,即损伤位置和程度,在其中利用了选定位置的引导式兰姆波响应(Matlab代码实现) 99 100 摘要:会在推荐、列表等场景外露,帮助读者快速了解内容,支持一键将正文前 256 字符键入摘要文本框 0 256 AI提取摘要 您已同意GitCode 用户协议 和 隐私政策,我们会为您自动创建账号并备份文章至我的项目。 活动 话题 共 0 字 意见反馈内容概要:本文研究了在湍流天气条件下,无人机发生发动机故障时的自动着陆问题,提出了一种多级适配控制策略,并通过Matlab进行仿真代码实现。该策略旨在提升无人机在极端环境下的安全着陆能力,重点解决了气流干扰与动力失效双重挑战下的姿态稳定与轨迹规划问题。研究涵盖了故障检测、控制系统重构、自适应调整及安全着陆路径生成等关键技术环节,验证了所提方法在复杂气象条件下的有效性与鲁棒性。; 适合人群:具备一定无人机控制、自动控制理论基础及Matlab编程能力的科研人员、研究生以及从事航空航天、智能控制领域的工程技术人员。; 使用场景及目标:①用于无人机故障应急控制系统的设计与仿真;②支持复杂环境下无人机动态响应分析与控制算法开发;③为飞行器自主安全着陆技术提供解决方案参考。; 阅读建议:建议结合Matlab代码与控制理论深入理解多级适配机制,重点关注故障识别与控制切换逻辑,可通过修改仿真参数测试不同湍流强度下的系统表现,以加深对算法鲁棒性的认识。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值