4

Spring--IOC与AOP

 2 years ago
source link: http://blog.linrty.com/2021/07/21/Spring--IOC%E4%B8%8EAOP/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

IOC底层原理

什么是IOC

  1. 控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理。

  2. 使用IOC目的:为了耦合度降低,当两个类不需要彼此时,不会产生依赖的关系,只有当需要彼此的时候才会进行依赖注入,产生依赖关系,用这种方式来降低两个类之间的耦合程度

  3. 核心地方在于,资源不由使用资源的双方进行管理,而交给第三方来进行管理也就是Spring,比如卖房者和买房者都找中介就可与了

    IOC是一种思想,它是通过DI来实现的(可以将它当成是中介者),而IOC容器就像是中介厂商,里面挂满了需要卖出去的房子(也就对应着,那么注册过的类)供中介者(DI)来给需要买房的人提供房源,

IOC底层原理

  1. xml解析、工厂模式、反射

IOC(Inversion of Control)控制反转是通过DI(Dependency Injection)依赖注入来实现的

image-20210718184231610

image-20210718184337445

进一步降低耦合度

image-20210718184517745

IOC接口(BeanFactory)

  1. IOC思想基于IOC容器完成,IOC容器底层就是对象工厂。

  2. Spring提供IOC容器实现两种方式:(两个接口)

    BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员进行使用,加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象

    ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用,加载配置文件时候就会把在配置文件对象进行创建

  3. ApplicationContext接口有实现类

    image-20210718185352805

IOC操作Bean管理

Bean的管理有两种方式

  1. xml方式
  2. 注解方式(实际开发中推荐)

代码网上有很多,不演示

AOP底层原理

什么是AOP

面向切面编程,可以当作是面向对象编程(OOP)的一个扩展,或是完善

我们都知道面向对象编程的三大特性:封装、继承、多态。但是有的时候我们需要把某个功能模块用作为公共模块,而OOP的封装特性就像是把这些功能包裹在了一个球内,我们无法对其进行处理,这样导致了模块无法进行重用。

而面向切面编程不一样,之所以命名为切面,是因为它就像是一把刀一样,将球切开,将球的某个需要重用的部分(命名为Aspedt)取出来,与某些和业务无关的逻辑代码进行封装,这样减少了代码的重复,将模块做到了可重用,并降低了模块间的耦合度。通常我们实际开发中使用到的有:事务处理、日志,这些与实际的业务并无关系,但是需要降入其中

AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”

AOP底层原理

动态代理、静态织入

Spring AOP代理对象的生成

Spring提供了两种方式来生成代理对象: JDKProxy和Cglib,具体使用哪种方式生成由AopProxyFactory根据AdvisedSupport对象的配置来决定。默认的策略是如果目标类是接口,则使用JDK动态代理技术,否则使用Cglib来生成代理

将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期,当然不同的发生点有着不同的前提条件。譬如发生在编译期的话,就要求有一个支持这种AOP实现的特殊编译器;发生在类装载期,就要求有一个支持AOP实现的特殊类装载器;只有发生在运行期,则可直接通过Java语言的反射机制与动态代理机制来动态实现。

image-20210721174206658

image-20210721174244569

本文作者: linrty
本文链接: http://blog.linrty.com/2021/07/21/Spring--IOC%E4%B8%8EAOP/
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK