zoukankan      html  css  js  c++  java
  • 怎样理解Spring的IOC和AOP?

    一、什么是AOP和IOC?
    二、它们可以解决什么问题?
    三、它们之间的关系、
    四、怎样应用他们?

    一、什么是AOP和IOC?

    AOP和IOC是spring的核心

    Spring首先它是一个开源而轻量级的框架。其核心容器的主要组件是Bean工厂(BeanFactory)。Bean工厂使用控制反转(IOC)模式来降低程序代码之间的耦合度,并提供了面向切面编程(AOP)的实现。

    1.AOP
    1.1.AOP 为 Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。简单来说,就是在不修改原代码码的情况下对方法进行功能增强。
    1.2.底层实现:AOP 的底层是通过 Spring 提供的的动态代理技术实现的。在运行期间,Spring通过动态代理技术动态的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强。
    ![](https://img2020.cnblogs.com/blog/1827620/202003/1827620-20200303205045091-1808160983.png)
    黑线为一个流程代码,红线为切入的代码。即在4个流程中固定位置插入了2个逻辑代码,如果你不需要的时候,你完全可以撤出红线代码,而要修改的话,也只需修改这三个类(红线)即可,因为主代码(黑线)和添加代码(红线)是没有耦合的,相当于插拔式的。这就是我们所说的AOP,AOP就是在某一个类或方法执行前后打个标记,声明在执行到这里之前要先执行什么,执行完这里之后要接着执行什么。插入了新的执行方法。

    2.IOC
    2.1.什么是IoC:控制反转(Inversion of Control),又称为依赖注入(Dependency Injection),把创建对象的控制权交出去,从主动创建对象变为被动接受对象。具体的说就是,在传统的程序设计中,如果在web层要调用service层的方法,就必须在web层主动创建service层实现类对象,但是在spring中,创建对象的工作不再由调用者主动完成,而是把创建对象的控制权交给spring的bean工厂, 调用者只负责接收这个对象。
    2.2.IoC的作用:实现解耦,更准确的说是实现了编译期解耦,还存在运行期解耦。实现运行期解耦可以引入配置文件对依赖对象的路径进行配置。

    二、它们可以解决什么问题?
    Spring 的AOP和IOC都是为了解决系统代码耦合度过高的问题。使代码重用度高、易于维护。
    IOC:控制反转,是一种设计模式。一层含义是控制权的转移:由传统的在程序中控制依赖转移到由容器来控制;第二层是依赖注入:将相互依赖的对象分离,在spring配置文件中描述他们的依赖关系。他们的依赖关系只在使用的时候才建立。简单来说就是不需要NEW一个对象了。
    AOP:面向切面,是一种编程思想,OOP的延续。将系统中非核心的业务提取出来,进行单独处理。比如事务、日志和安全等。这个简单来说就是可以在一段程序之前或者之后做一些事。

    三、它们之间的关系?
    无联系。二者都是Spring的模块。
    ![](https://img2020.cnblogs.com/blog/1827620/202003/1827620-20200303212308972-2077854195.png)

    四、怎样应用他们?
    4.1.AOP
    AOP模块是Spring的AOP库,提供了AOP(拦截器)机制,并提供常用的拦截器,供用户自定义和配置。AOP是OOP的延续.
    主要的功能是:日志记录,性能统计,安全控制,事务处理,异常处理等等
    4.2.IOC

  • 相关阅读:
    追求一个人怎么这么难
    基于PHPstream扩展手动实现一个redis客户端
    常见final修饰类
    位运算
    HTTP Status 404
    Hibernate Junit 运行报错:org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment
    根据银行卡号码获取银行卡归属行以及logo图标
    进程间通信IPC(InterProcess Communication)
    脏读、幻读、不可重复读和可重复读
    数据库锁知识总结
  • 原文地址:https://www.cnblogs.com/aaaazzzz/p/12404939.html
Copyright © 2011-2022 走看看