spring的AOP和IOC的原理

这篇具有很好参考价值的文章主要介绍了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、面向切面的编程。面向切面编程的思想就是在执行某些代码前执行另外的代码,使程序更灵活、扩展性更好,可以随便地添加、删除某些功能。
 文章来源地址https://www.toymoban.com/news/detail-445723.html

spring的AOP和IOC的原理
  • 二、代理模式:

    • 概念
      • 是程序设计的一种
      • 代理模式就是为其他的对象提供一种代理以控制这个对象的访问某些情况下每个对象不适合或者不能直接引用另一个对象二代理对象可以在客户端与目标对象之间起到中介的作用
    • 组成:
      spring的AOP和IOC的原理
      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:xsi="http://www.w3.org/2001/XMLSchema-instance"
      4.     xmlns:aop="Index of /schema/aop"
      5.     xsi:schemaLocation="Index of /schema/beans
      6.     http://www.springframework.org/schema/beans/spring-beans-xxx.xsd
      7.     Index of /schema/aop
      8.     http://www.springframework.org/schema/aop/spring-aop-xxx.xsd ">
      9. </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:定义抛出通知

到了这里,关于spring的AOP和IOC的原理的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spring 使用注解开发、代理模式、AOP

    在Spring4之后,要使用注解开发,必须要保证AOP的包导入了 项目搭建: 在配置文件中导入约束,增加注解支持 bean 实体类 @Component 注解 xml配置 测试: 属性如何注入 衍生的注解 @Component 有几个衍生的注解,我们在web开发中,会按照MVC三层架构分层 dao层: @Repository 等价于poj

    2024年02月13日
    浏览(33)
  • JDK 动态代理(Spring AOP 的原理)(面试重点)

            也叫委托模式.定义:为其他对象提供⼀种代理以控制对这个对象的访问.它的作⽤就是通过提供⼀个代理类,让我们 在调⽤⽬标⽅法的时候,不再是直接对⽬标⽅法进⾏调⽤,⽽是通过代理类间接调⽤,在某些情况下,⼀个对象不适合或者不能直接引⽤另⼀个对象,⽽代

    2024年01月22日
    浏览(30)
  • B057-spring增强 依赖注入 AOP 代理模式 创建Bean

    DI:依赖注入 环境准备,即写一个spring测试,见工程 构造器注入 即使用构造器来给Bean的对象的属性赋值 MyBean OtherBean SpringTest-Context.xml SpringTest setter方法注入 即用setter方法给bean对象的属性赋值 MyBean OtherBean SpringTest-Context.xml SpringTest AOP 概念 事务管理:比如可以抽取try catch的

    2024年02月12日
    浏览(30)
  • Spring IOC & AOP

    IOC,全程Inversion of Control(控制反转) 通过控制反转(创建对象的权限交给框架,所以叫反转)创建的对象被称为 Spring Bean ,这个Bean和用new创建出来的对象是没有任何区别的。 官方解释:Spring 通过 IoC 容器来管理所有 Java 对象的实例化和初始化,控制对象与对象之间的依赖

    2024年02月16日
    浏览(29)
  • Spring5系列学习文章分享---第三篇(AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式))

    开篇: 欢迎再次来到 Spring 5 学习系列!在这个博客中,我们将深入研究 Spring 框架的AOP概念+原理+动态代理+术语+Aspect+操作案例(注解与配置方式)。 概念 什么是AOP (1)面向切面编程(方面),利用 AOP 可以对业务逻辑的各个部分进行隔离,从而使得 业务逻辑各部分之间的

    2024年01月24日
    浏览(37)
  • 什么是 AOP?对于 Spring IoC 和 AOP 的理解?

    AOP(Aspect-Oriented Programming) ,即 面向切面编程, 它与 OOP( ObjectOriented Programming, 面向对象编程) 相辅相成,提供了与OOP 不同的抽象软件结构的视角 在 OOP 中, 我们以 类(class) 作为我们的基本单元 而 AOP 中的基本单元是 Aspect(切面) IOC(Inverse of Control:控制反转) 是一种设计思想,

    2024年02月12日
    浏览(34)
  • Spring核心思想之IOC和AOP

    IOC和AOP不是Spring提出的,在spring之前就已经存在,只不过更偏向于理论化,Spring在技术层次把这两个思想做了⾮常好的实现(Java)。 什么是IoC? IoC Inversion of Control (控制反转/反转控制),注意它是⼀个 技术思想 ,不是⼀个技术实现。 描述的事情 :Java开发领域对象的创建,

    2024年02月09日
    浏览(42)
  • 【Java面试】Spring中的IOC和AOP

    IOC:控制反转也叫依赖注入。利用了工厂模式 将对象交给容器管理,你只需要在spring配置文件总配置相应的bean,以及设置相关的属性,让spring容器来生成类的实例对象以及管理对象。在spring容器启动的时候,spring会把你在配置文件中配置的bean都初始化好,然后在你需要调用的

    2024年02月10日
    浏览(35)
  • 【Java学习】 Spring的基础理解 IOC、AOP以及事务

        官网: https://spring.io/projects/spring-framework#overview     官方下载工具: https://repo.spring.io/release/org/springframework/spring/     github下载: https://github.com/spring-projects/spring-framework     maven依赖: 1.spring全家桶的结构构图:              最下边的是测试单元   其中spring封装

    2024年02月09日
    浏览(29)
  • 全面掌握Spring框架:深入解析IOC、AOP、事务管理与注解使用

    探索Spring框架的深层次知识,包括Spring IOC容器的初始化流程、AOP的实现机制、事务管理的细节、循环依赖问题的处理、条件注解的应用、JavaConfig的使用方法、PostProcessor的角色、@Autowired和@Value注解的高级应用,以及${}与#{}的区别。

    2024年03月13日
    浏览(181)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包