Spring IOC AOP归纳总结

Spring
  • AOP:面向切面编程(作用:将散布在系统中的公共问题集中解决 目的:用来降低耦合)
    • 基本概念:
      • 切面(Aspect):类似于OOP中的Class,一个Aspect存放一个系统功能的所有逻辑;在ApplicationContext中aop:aspect来配置;
      • 连接点(Joinpoint):连接点是一个应用执行过程中能够插入一个切面的点。如方法被调用时、抛出异常时;切入点的集合
      • 切入点(Pointcut):它相当于是一个插入横切逻辑的位置,用于确定哪些类的哪些函数需要插入横切逻辑;究竟要在函数执行的哪个阶段插入横切逻辑,这就由通知的类型决定;
      • 通知(Advice):通知定义了切面是什么以及何时使用 前置通知——在方法调用之前调用通知 后置通知——在方法完成之后调用通知,无论方法执行成功与否 返回通知——在方法执行成功之后调用通知 异常通知——在方法抛出异常后进行通知 环绕通知——通知包裹了被通知的方法,在被通知的方法调用之前和调用之后执行自定义的行为;
    • 动态代理:
      • JAVA动态代理: 必须实现接口 JAVA内部的反射机制来实现的
      • CGLIB实现方式:使用生成子类的方式 借助asm来实现的 原理是对制定的目标类生成一个子类,并覆盖其中方法来实现增强。
        ASM是一个JAVA字节码分析、创建和修改的开源应用框架。它可以动态生成二进制格式的stub类或其他代理类,或者在类被JAVA虚拟机装入内存之前,动态修改类。
        j2ee里面的stub是这样说的..为屏蔽客户调用远程主机上的对象,必须提供某种方式来模拟本地对象,这种本地对象称为存根(stub),存根负责接收本地方法调用,并将它们委派给各自的具体实现对象​
      • 区别:
    • 静态代理:
      • 好处:开闭原则,依赖倒置,单一职责。
      • 坏处:有多个类,则要编写多个代理类,不能对应变化。
    • 应用场景:
      • Spring事务也可以被看作一个AOP,当抛出异常时触发回滚。
      • 在唯品会有做一个功能,配置推送后。有个最近更新信息显示(会员等级配置,会员奖励补偿,等等有很多页面都要用到)
      • 代理模式 osp远程调用,虚拟代理(桌面图标)保护代理(不同用户提供不同级别的使用权限),只能引用代理(记录被调用的次数,页面被访问的次数),spring(bean的懒加载)
  • IOC:控制反转
    • 控制反转是一种面向对象的思想,它是一种宽泛的概念,只要一个类将对它内部状态的控制权交由其他机制去完成即为『控制反转』。控制反转是为了降低类与类之间的耦合度。
    • 控制反转是目的,依赖注入是实现控制反转的手段。
    • DI(Dependency Injection):依赖注入。
      • 依赖注入的三种方式:
        • 1.构造注入:将被依赖对象通过构造函数的参数注入给依赖对象,并且在初始化对象的时候注入。
          • 优点:对象初始化完成后便可获得可使用的对象。
          • 缺点: 1. 当需要注入的对象很多时,构造器参数列表将会很长; 2. 不够灵活。若有多种注入方式,每种方式只需注入指定几个依赖,那么就需要提供多个重载的构造函数。
        • 2.set方法注入:通过调用成员变量提供的setter函数将被依赖对象注入给依赖类。
          • 优点:灵活。可以选择性地注入需要的对象。
          • 缺点:依赖对象初始化完成后由于尚未注入被依赖对象,因此还不能使用。
        • 3.接口注入:依赖类必须要实现指定的接口,然后实现该接口中的一个函数。
          • 优点:该函数就是用于依赖注入。该函数的参数就是要注入的对象。 
          • 缺点:侵入行太强,不建议使用。
            什么是侵入行? 
            如果类A要使用别人提供的一个功能,若为了使用这功能,需要在自己的类中增加额外的代码,这就是侵入性。

你可能感兴趣的:(JAVA)