美文网首页
Spring-004-AOP原理和操作

Spring-004-AOP原理和操作

作者: 井易安 | 来源:发表于2018-05-06 15:22 被阅读0次

AOP概念

  1. AOP: 面向切面编程,扩展一个功能不是通过修改源代码来实现
    aop采取横向抽取机制,取代了传统的纵向继承体系重复性代码

AOP原理

原始的做法 扩展功能时需要修改源代码

image
纵向抽取机制解决
image
横向机制的第一种情况
image

横向机制的第二种情况

image

AOP术语

Joinpoint(连接点):类里面可以被增强的方法,这些方法被称为连接点
PointCut(切入点) : 实际被增强的方法称为切入点
Advice(通知/增强):实际增强的逻辑,实际扩展的功能的逻辑称为增强
增强类型:

  1. 前置通知:在方法之前执行
  2. 后置通知:在方法之后执行
  3. 异常通知:方法出现异常
  4. 最终通知:在后置通知之后执行
  5. 环绕通知:在方法之前和之后执行

Aspect(切面):把增强应用到具体的方法上面,过程称为切面 把增强用到切入点的过程 叫做切面。

Spring的aop操作

  1. 在spring里面进行aop操作,使用aspectj实现
    1. aspectj是一个面向切面的框架,和spring一起使用进行aop操作、
  2. 使用aspectj实现aop有两种方式
    1. 基于aspectj的xml配置
    2. 基于aspectj的注解方式

AOP操作准备工作

  1. 出了导入基本jar包之外,还要导入aop相关的jar包
  2. 创建spring核心配置文件,导入aop约束

使用表达式配置切入点

  1. 切入点:实际增强的方法
  2. 常用的表达式
    execution(<访问修饰符>?<返回类型>?<方法名>(<参数>)<异常>)
    1. execution(* com.ljy.aop.Book.add(..)) *代表所有的访问修饰符 路径是需要增强的方法的全路径 ..表示 参数
    2. execution(* com.ljy.aop.Book.*(..))
    3. execution(* .(..))
    4. 匹配所有abc开头的方法 excution(* abc*(..))

Aspectj aop操作

<!--配置aop操作  -->
    <aop:config>
        <!-- 配置切入点pointcut -->
        <aop:pointcut expression="execution(* com.ljy.aop.Book.add(..))" id="pointcut1"/>
        <!-- 配置切面 aspect
            把增强的类对象用到方法上
        -->
        <aop:aspect ref="myBook">
            <!-- 配置增强类型
                method:增强类里面使用那个方法作为前置增强
             -->
            <aop:before method="before1" pointcut-ref="pointcut1"/>
            <aop:after-returning method="after1" pointcut-ref="pointcut1"/>
            <aop:around method="around1" pointcut-ref="pointcut1"/>
        </aop:aspect>
    </aop:config>
public void before1(){
        System.out.println("前置增强");  //在add之前实现before1
    }
    public void after1(){
        System.out.println("后置增强");
    }
    //环绕通知  之前之后都要执行
    public void around1(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
        //方法之前 
        System.out.println("方法之前...");
        //执行被增强的犯法
        proceedingJoinPoint.proceed();
        //方法之后
        System.out.println("方法之后...");
    }
}

Log4j

  1. 通过log4j可以看到程序运行过程中更详细的信息。
    1. 经常使用log4j查看日志
  2. 使用
    1. 导入log4j的jar包
    2. 赋值log4j配置文件,复制到src下面
    3. 可以设置日志级别 info 基本信息 debug详细信息

spring整合web项目

启动web项目的时候每次都会加载一遍xml文件和创建对象,这样效率就会很低,所以应该把这些内内容交给服务器去做 底层使用监听器和ServletContext对象,然而spring框架已经封装一个监听器,只需要配置监听器就可以了
在web.xml中配置listener之前需导入spring-web jar包

 <!-- 配置监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

但是监听器会默认找 名为applicationContext.xml的文件
如果出现其他名字 于是需要改为真正的spring配置文件位置

 <!-- 指定spring配置文件位置 -->
  <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext1.xml</param-value>
  </context-param>

基于aspectj的注解aop操作

  1. 创建对象
    <bean id="book" class="com.ljy.springaop.Book"></bean>
    <bean id="myBook" class="com.ljy.springaop.Mybook"> </bean>
  1. 在spring核心配置文件中,开启aop操作
    <!-- 开启aop操作 -->
    <aop:aspectj-autoproxy></aop:aspectj-autoproxy>
  1. 在增强的类上面使用注解完成aop操作
public class Mybook {
    //在方法上面使用注解完成增强配置
    @Before(value="execution(* com.ljy.springaop.Book.*(..))")
    public void before1(){
        System.out.println("before1....");
    }
}

相关文章

  • Spring-004-AOP原理和操作

    AOP概念 AOP: 面向切面编程,扩展一个功能不是通过修改源代码来实现aop采取横向抽取机制,取代了传统的纵向继...

  • 程序员进阶书单:操作系统篇

    《操作系统精髓与设计原理》 全面地讲述了操作系统的基本概念、原理和方法,展现了当代操作系统的本质和特点。对操作...

  • lvm原理和操作

    9月27日任务4.10/4.11/4.12 lvm4.13 磁盘故障小案例 lvm lvm是逻辑盘卷管理(Logi...

  • stream系列——初始stream方法

    map原理 filter原理 flatMap原理 reduce操作累加

  • mysql之修改表结构【Alter】

    今天呢,咱们来谈谈DDL中的Alter操作,只谈操作,底层实现和原理不谈哦。想知道原理的:咳咳,对不起这个暂时真没...

  • AFLP原理和操作步骤

    AFLP是通过限制性内切酶片段的不同长度检测DNA多态性的一种DNA分子标记技术。本AFLP 技术主要特点 :分析...

  • 堆的基本操作与堆排序(C/C++实现)

    原理参考:堆和堆排序原理介绍 堆的基本操作(以最小堆为例) 基本数组的定义 向下调整操作 向下调整操作一般是针对一...

  • PHP面试之分库分表

    真题 简述MySQL分表操作和分区操作的工作原理,分别说说分区和分表的使用场景和各自的优缺点。 分区表的原理 工作...

  • 发明原理10预操作

    预操作原理也是一种提前动作的原理,它和原理9不同之处是它强调的是一个动作或者工艺。 我们常见的预操作就是给邮票涂上...

  • RxSWift Combination Operators of

    使用示例 switchLatest switchLatest操作符的实现和Merge操作符原理相似。 结合函数原型...

网友评论

      本文标题:Spring-004-AOP原理和操作

      本文链接:https://www.haomeiwen.com/subject/oxjurftx.html