spring的AOP和IOC的原理

目录

一、spring的ioc与aop原理

二、代理模式:

三、静态代理

四、动态代理

五、实际的操作

六、动态代理的实现:

七、什么是AOP

八、主流的AOP框架:

九、术语:

十、通知的五种类型:

十一、AOP的优点:

十二、AOP开发流程


一、spring的ioc与aop原理

  • 核心概念:控制反转(IOC)/(DI),面向切面(AOP)

        IOC和DI:本质相同只是不同的角度描述而已。

        IOC:

                使用Spring框架之后对象的实例不再由调用者来创建,而是直接由Spring容器来创建,Spring容器会负责控制程序之间的关系,而不是调用者的程序代码直接控制。控制权由应用程序转移到Spring容器,控制权发生了反转。

        DI:

                从Spring容器的角度来看,Spring容器负责被依赖对象赋值给调用者的长远变量,这相当于为调用者注入了它依赖的实例,这就是Spring的依赖注入。

aop(面向切面编程) 原理:
    由于组件是在运行期间组装、调用的,因此Spring即可以在执行完A组件后执行组件B,也可以执行完A组件后执行B组件前再执行C组件。也就是说,将C组件插入到A组件与B组件之间。
    如果把A、B、C看成是切面,这就是AOP、面向切面的编程。面向切面编程的思想就是在执行某些代码前执行另外的代码,使程序更灵活、扩展性更好,可以随便地添加、删除某些功能。
 

  • 二、代理模式:

    • 概念
      • 是程序设计的一种
      • 代理模式就是为其他的对象提供一种代理以控制这个对象的访问某些情况下每个对象不适合或者不能直接引用另一个对象二代理对象可以在客户端与目标对象之间起到中介的作用
    • 组成:
      1. 抽象角色:【行为】
        • 通过接口或者抽象类声明真实角色的实现(业务方法)
      2. 代理对象【连接真实角色的桥梁】
        • 实现抽象角色,是真实角色的代理,通过真实的 角色的业务逻辑方法,来实现抽象方法,附加自己的操作。
      3. 真实角色【需要被代理的对象】
        • 实现抽象角色,定义镇海寺的角色搜要实现的业务逻辑,提供代理角色调用
  • 三、静态代理

    • 由我们创建或者工具生成的代理,字编译代理类,所谓的惊涛代理就是在程序执行之前九已经存爱的代理类,代理类和委托类的关系在运行之前就已经确定了。
  • 四、动态代理

    • 动态代理凭借灵活性子框架中应用非常的广泛,是代理模式的一种
    • 是在实现阶段不关心代理类,而是在运行阶段才指定哪一个对象,这就意味着不关心代理类是如何实现的,不需要再写代理类。
  • 、实际的操作

    ​​​​​​​
    • 代理类中没有真实的实现接口,而是调用目标类的租房rent方法。
  • 六、动态代理的实现:

    • 在程序的执行过程中,使用JDK的反射机制,创建代理类对象,并动态的指定要代理的目标类。
    • 它可以实现不用写代理类的实现就可以创建代理类对象。
    • JDK的动态代理是就与反射 实现的,使用JDK中接口和类实现代理对象的创建。
    • JDk动态代理必须实现三个类 Method ,Proxy,InovcationHandler
  • 七、什么是AOP

    • 面向切面编程,和OOP(面向对象编程)类似,一也是一种编程思想。
    • AOP的 作用【横向抽取机制】
      • AOP采取横向抽取【动态代理】,对啊了传统纵向继承的重复性代码,器应用主要体现在事务处理,日志管理,权限管理,异常处理等方面。
      • 主要作用:
        • 分离功能性需求和非功能性需求,是开发人员可以集中 的处理某一个关注点或者横切逻辑
        • 减少对业务代码的侵入
        • 增强代码的可读性和可维护性【简单来说,AOP的作用就是保证开发者在不修改源代码的前提下,为系统业务组件添加某种通用的功能,AOP就是代理模式的经典应用】
  • 八、主流的AOP框架:

    • Spring AOP 
      • 基于AOP编程模式的一个框架,能够有效的减少系统 间的代码重复,达到松耦合的目的。
      • 纯java实现,不需要专门的编译器和类加载器,在运行期间通过代理方式象目标类植入增强的代码。
    • ASpectJ
      • 基于java语言的AOP框架,提供专门的编译器,在编译时提供横向代码的植入。
  • 九、术语:

    • Target:目标类【需要被代理的类】
    • Joinpoint:连接点【指哪些可能被拦截的方法】
    • PointCut:切入点【已经被增强的连接点】
    • Advice:通知/增强【增强代码(前置通知,后置通知,返回通知,抛出异常通知,环绕通知)】
    • WeaVing:植入【把增强的方法,应用到目标的Target来创建新的代理对象Proxy的过程】
    • Proxy:代理类
    • Aspect:切面平【是切入点+通知的结合】
  • 十、通知的五种类型:

    • before:前置通知
    • after:后置通知
    • after-returning:返回后通知
    • after-throwing:抛出异常后通知
    • around:环绕通知
  • 十一、AOP的优点:

    • 是Spring的核心之一,使用AOP来优化编程,在Spring框架中使用AOP的主要优势:
      1. 提供声明式企业服务:
        • 特别是作为EJB声明式服务的替代品,最重要 的是这种事务是声明式事务。
      2. 自定义切面:
        • 允许用户实现自定义切面。在默写不适应OOP编程的场景中吗,采用AOP来补充
      3. 耦合度降低:
        • 可以对业务逻辑的各个部分进行隔离,从而实业务逻辑的各个部分之间的耦合度降低,提高程序的可重用性,同时也提高了开发。
  • 十二、AOP开发流程

    <bean id ="userService" class ="com.shang.aopdemo02.UserServiceImpl" ></bean>
    <bean id="AOPAdvice" class="com.shang.rentdemo.UserAop"></bean>
    <aop:config>
    <aop:pointcut id="pointcut" expression="execution(* com.shang.aopdemo02.*.add*(..))"/>
    <aop:aspect ref="AOPAdvice">
    <aop:before pointcut-ref="pointcut" method="beforeAdvice" ></aop:before>
    <aop:after pointcut-ref="pointcut" method="afterAdvice"></aop:after>
    <aop:after-returning pointcut-ref="pointcut" method="afterReturnAdvice" ></aop:after-returning>
    <aop:around pointcut-ref="pointcut" method="aroundAdvice"></aop:around>
    <aop:after-throwing pointcut-ref="pointcut" method="afterThrowAdvice" ></aop:after-throwing>
    </aop:aspect>
    </aop:config>
    1. 导入依赖
    2. 在xml文件中加入
      1. < ? xml version= "1.0" encoding= "UTF-8" ? >
      2. <beans xmlns="Index of /schema/beans"
      3.     xmlns:aop="Index of /schema/aop"
      4.     xsi:schemaLocation="Index of /schema/beans
      5. </beans>
    3. AOP的增强类【before after 等方法】
    4. 实现的第一种方式:在xml自定义切面实现
    5. 实现的第二种方式:注解
      1. 在xml中开启注解和扫描包
      2. 在方法的上面加上注解
        1. @Aspect:定义一个切面
        2. @Pointcut:用于定义一个切入点
        3. @Before:定义前置通知
        4. @After:定义最终通知
        5. @AfterReturning:定义后置通知
        6. @Around:定义环绕通知
        7. @AfterThrowing:定义抛出通知

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当谈到Spring框架的面试题时,Spring AOPIOC是两个常见的话题。下面是一些可能的面试问题和答案: 1. 什么是Spring AOPSpring AOP是一种基于面向切面编程(AOP)的技术,它允许开发人员在应用程序中定义横切关注点,并将它们与应用程序的业务逻辑相分离。通过将这些横切关注点(例如日志记录、事务管理等)从核心业务逻辑中提取出来,可以实现更好的模块化和可维护性。 2. Spring AOP的工作原理是什么? Spring AOP通过使用代理模式在运行时为目标对象动态地创建代理对象来实现横切关注点的功能。当调用目标方法时,代理对象会在执行前、执行后或异常发生时插入相关的横切逻辑。 3. Spring IOC是什么意思? Spring IOC(控制反转)是一种设计模式,它将对象的创建和依赖关系的管理从应用程序代码中解耦出来,交由框架来完成。通过IOC容器,可以通过配置文件或注解方式来定义对象之间的依赖关系,Spring容器负责创建、装配和管理这些对象。 4. Spring IOC的优势是什么? 使用Spring IOC可以实现松耦合的设计,从而提高代码的可维护性和可测试性。它还提供了更好的可扩展性,通过配置文件或注解方式,可以方便地修改对象的依赖关系而无需修改代码。此外,Spring IOC还可以通过依赖注入的方式简化对象之间的协作。 5. Spring AOPIOC之间有什么关系? Spring AOPSpring框架的一个重要模块,它通过IOC容器来管理和应用横切关注点。在Spring中,AOP是建立在IOC的基础上的,通过IOC容器的支持,可以方便地在应用程序中应用AOP功能。 请注意,这些问题只是众多可能的面试问题中的一部分,面试官可能会根据他们的需求提出更具体的问题。为了取得良好的面试成绩,建议您深入了解Spring AOPIOC的概念、工作原理以及在实际项目中的应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值