Spring(二)

Spring-AOP

  • AOP思想概述
    AOP面向切面编程,AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间耦合度降低,提高程序的可重用性,同时提高了开发效率:

主要功能:日志记录。性能统计,安全控制,事务处理,异常处理

AOP:分离业务代码,提高程序的可用性

把各个业务逻辑的相同部分抽离出来,作为公共部分使用

Spring(二)_第1张图片

  • AOP底层实现技术
    关键词代理模式:
    代理模式分为两种:
    接口代理(JDK动态代理)

需求:CustomerService业务类,有save,update方法,希望在save、update方法执行之前记录日志

核心:Proxy.newProxyInsatnce();
JDK动态代理:
Spring(二)_第2张图片

Spring(二)_第3张图片

注意:jdk的动态代理必须是介基于接口的,没有接口会报错

Spring(二)_第4张图片

子类代理(GCLib子类代理)

如果说目标对象没有接口,则只能使用子类代理:
导入CGlib的jar包:
这里写图片描述

没有接口的实现类:

Spring(二)_第5张图片

intercept:每次代理类对象执行方法的时候都会执行该方法

Spring(二)_第6张图片

核心方法:Enhancer.create();

Spring(二)_第7张图片

  • AOP术语介绍
    jdk代理:必须依靠接口来实现
    GCLIB代理:可以没有子类

SpringAOP本质上采用了这两种底层技术,具体使用哪种,可以根据是否有接口自动识别,有接口使用jdk代理,没有则使用GCLIB代理

1)目标对象:—Target
对目标类new出来的对象 —-目标对象
2)代理类:Proxy
目标对象的代理类 -也可以生成对象
3)连接点:JoinPoint
目标对象上的方法
4)切入点:PonitCut
连接点上需要做事情的方法
5)通知(增强)Advice
要做的事情(比如记录日志),切入点上的操作
6)切面:(Aspect)
通知+切入点
7)织入(切入):weaving
将通知织入切入点

图形结构:

Spring(二)_第8张图片

  • *SrpingAOP
    1)SpringAOP的XML方式
    导入jar包:
    Spring(二)_第9张图片
    AOP必须依赖于IOC,所以IOC的依赖包也必须导入

Spring(二)_第10张图片

注意:使用了aspectJ插件,作用是简化Spring的XML方式AOP编程,使得配置简单(主流都会使用)

Spring(二)_第11张图片

编写applicationContext配置文件:
Spring(二)_第12张图片

Spring(二)_第13张图片
编写测试类:

Spring(二)_第14张图片

SpringAOP配置细节:
切入点表达式:
1.execution():代表要切入的方法—固定语法
2.public:方法的修饰符,通常为公开的方法
3.void:方法的返回值。可以使用通配符 ,可以代表所有切入的返回值类型
4.cn.sm1234.service.impl:类所在的包:
可以使用通配符 * (*只能匹配一级目录)
可以使用.. 匹配任意级目录
5.CustomerServiceImpl:类名称
可以使用通配符:* (任意字符)
6.save():代表方法

7.方法的参数
可以使用通配符:..可以匹配任何类型的参数
Spring(二)_第15张图片

通知类型:
前置通知 :aop-before :在方法的前面执行
最终通知:在方法的最后执行,无论方法是否出现异常,通知都会被执行

后置通知:在方法的最后执行,只有在 方法成功执行之后才会被执行

异常通知:在方法出现异常的时候执行

环绕通知:在方法的前后执行

Spring(二)_第16张图片

Spring(二)_第17张图片

Spring(二)_第18张图片

2)SpringAOPd的注解方式

Spring(二)_第19张图片

在xml中配置开启SpringAOP注解:

Spring(二)_第20张图片

3)SpringAOP的零配置:
不需要applicationContext.xml文件

编写SpringConfig:
Spring(二)_第21张图片

Spring(二)_第22张图片

Spring(二)_第23张图片

你可能感兴趣的:(java基础知识点,开发)