springday02-----Spring AOP

什么是 AOP
Aspect Oriented Programing 面向切面编程,相比较 oop 面向对象编程来说, Aop 关注的不再是程
序代码中某个类,某些方法,而 aop 考虑的更多的是一种面到面的切入,即层与层之间的一种切入,所以称之为切面。

AOP 能做什么?
AOP 主要应用于日志记录,性能统计,安全控制 , 事务处理等方面,实现公共功能性的重复使用。
代理模式
代理模式在 Java 开发中是一种比较常见的设计模式。设计目的旨在为服务类与客户类之间插入其他功能,插入的功能对于调用者是透明的,起到伪装控制的作用。
        代理模式的两个设计原则:
                1. 代理类 与 委托类 具有相似的行为(共同)
                2. 代理类增强委托类的行为
常用的代理模式:
1. 静态代理
2. 动态代理
代理的三要素
a 、有共同的行为(结婚) - 接口
b 、目标角色(新人) - 实现行为
c 、代理角色(婚庆公司) - 实现行为 增强目标对象行为
静态代理的特点
        1、目标角色固定
        2、在应用程序执行前就得到目标角色
        3、代理对象会增强目标对象的行为
        4、有可能存在多个代理 引起 " 类爆炸 " (缺点)
动态代理
相比于静态代理,动态代理在创建代理对象上更加的灵活,动态代理类的字节码在程序运行时,由
Java 反射机制动态产生。它会根据需要,通过反射机制在程序运行期,动态的为目标对象创建代理对象,无需程序员手动编写它的源代码。动态代理不仅简化了编程工作,而且提高了软件系统的可扩展 性,因为反射机制可以生成任意类型的动态代理类。代理的行为可以代理 多个方法 即满足生产需要的 同时又达到代码通用的目的
动态代理的两种实现方式:
        1. JDK 动态代理
        2. CGLIB动态代理
JDK 的动态代理依靠接口实现,如果有些类并没有接口实现,则不能使用 JDK 代理
JDK 代理与 CGLIB 代理的区别
        JDK动态代理实现接口, Cglib 动态代理继承思想
        JDK动态代理(目标对象存在接口时)执行效率高于 Ciglib
JDK 代理    
         如果目标对象有接口实现,选择JDK代理,如果没有接口实现选择 Cglib 代理
CGLIB 动态代理
        JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能使用 JDK 的动态代理, cglib 是针对类来实现代理的,它的原理是对指定的目标类生成一个子类,并覆盖其中方法实现增强,但因为 采用的是继承,所以不能对 final 修饰的类进行代理。
动态代理的特点
        1. 目标对象不固定
        2. 在应用程序执行时动态创建目标对象
        3. 代理对象会增强目标对象的行为
AOP :Aspect Oriented Programing       面向切面编程
代理模式实现三要素
        1. 接口定义
        2. 目标对象与代理对象必须实现统一接口
        3. 代理对象持有目标对象的引用 增强目标对象行为

    Aop 理解
        1. 面向切面,相比oop 关注的是代码中的层 或面
        2. 解耦,提高系统扩展性
        3. 提高代码复用

    底层代理模式--动态代理
   
AOP 的特点
        1. 降低模块与模块之间的耦合度,提高业务代码的聚合度。(高内聚低耦合)
        2. 提高了代码的复用性。
        3. 提高系统的扩展性。(高版本兼容低版本)
        4. 可以在不影响原有的功能基础上添加新的功能

    应用场景:
                事务
                日志
                监控性能

    模式:        xml配置开发
                       注解开发
如何实现注解开发:
        1:引入坐标,开启注解开发
        2:抽象切面,配置通知,
        3:测试一下,执行目标方法
  
 概念
        1. 连接点 Joinpoint:被拦截到的每个点,spring中指被拦截到的每一个方法,spring aop一个连接点即代表一个方法的执行。
        2. 切入点 Pointcut:匹配的方法集合    对连接点进行拦截的定义(匹配规则定义 规定拦截哪些方法,对哪些方法进行处理),
        3. 切面 Aspect:连接点与切入点的集合决定了切面,横切关注点的抽象
        4. 通知|增强Advice:几种通知
        5. 目标对象Target:被代理对象
        6. 织入Weave:程序运行期将切面应用到目标对象 并生成代理对象的过程
        7. 引入 Introduction:在不修改原始代码情况下,在程序运行期为程序动态引入方法或字段的过程
   
 代理模式实现分类以及对应区别
    1. 静态代理:手动为目标对象制作代理对象,即在程序编译阶段完成代理对象的创建
    2. 动态代理:在程序运行期动态创建目标对象对应代理对象。
    3. jdk动态代理:被代理目标对象必须实现某一或某一组接口 实现方式 通过回调创建代理对象。
    4. cglib 动态代理:被代理目标对象可以不必实现接口,继承的方式实现。
    动态代理相比较静态代理,提高开发效率,可以批量化创建代理,提高代码复用率。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值