Spring--IOC与AOP

IOC
IOC底层原理
什么是IOC
-
控制反转,把对象创建和对象之间的调用过程,交给Spring进行管理。
-
使用IOC目的:为了耦合度降低,当两个类不需要彼此时,不会产生依赖的关系,只有当需要彼此的时候才会进行依赖注入,产生依赖关系,用这种方式来降低两个类之间的耦合程度
-
核心地方在于,资源不由使用资源的双方进行管理,而交给第三方来进行管理也就是Spring,比如卖房者和买房者都找中介就可与了
IOC是一种思想,它是通过DI来实现的(可以将它当成是中介者),而IOC容器就像是中介厂商,里面挂满了需要卖出去的房子(也就对应着,那么注册过的类)供中介者(DI)来给需要买房的人提供房源,
IOC底层原理
- xml解析、工厂模式、反射
IOC(Inversion of Control)控制反转是通过DI(Dependency Injection)依赖注入来实现的


进一步降低耦合度

IOC接口(BeanFactory)
-
IOC思想基于IOC容器完成,IOC容器底层就是对象工厂。
-
Spring提供IOC容器实现两种方式:(两个接口)
BeanFactory:IOC容器基本实现,是Spring内部的使用接口,不提供开发人员进行使用,加载配置文件时候不会创建对象,在获取对象(使用)才去创建对象
ApplicationContext:BeanFactory接口的子接口,提供更多更强大的功能,一般由开发人员进行使用,加载配置文件时候就会把在配置文件对象进行创建
-
ApplicationContext接口有实现类

IOC操作Bean管理
Bean的管理有两种方式
- xml方式
- 注解方式(实际开发中推荐)
代码网上有很多,不演示
AOP
AOP底层原理
什么是AOP
面向切面编程,可以当作是面向对象编程(OOP)的一个扩展,或是完善
我们都知道面向对象编程的三大特性:封装、继承、多态。但是有的时候我们需要把某个功能模块用作为公共模块,而OOP的封装特性就像是把这些功能包裹在了一个球内,我们无法对其进行处理,这样导致了模块无法进行重用。
而面向切面编程不一样,之所以命名为切面,是因为它就像是一把刀一样,将球切开,将球的某个需要重用的部分(命名为Aspedt)取出来,与某些和业务无关的逻辑代码进行封装,这样减少了代码的重复,将模块做到了可重用,并降低了模块间的耦合度。通常我们实际开发中使用到的有:事务处理、日志,这些与实际的业务并无关系,但是需要降入其中
AOP的核心思想就是“将应用程序中的商业逻辑同对其提供支持的通用服务进行分离。”
AOP底层原理
动态代理、静态织入
Spring AOP代理对象的生成
Spring提供了两种方式来生成代理对象: JDKProxy和Cglib,具体使用哪种方式生成由AopProxyFactory根据AdvisedSupport对象的配置来决定。默认的策略是如果目标类是接口,则使用JDK动态代理技术,否则使用Cglib来生成代理
织入
将切面应用到目标对象从而创建一个新的代理对象的过程。这个过程可以发生在编译期、类装载期及运行期,当然不同的发生点有着不同的前提条件。譬如发生在编译期的话,就要求有一个支持这种AOP实现的特殊编译器;发生在类装载期,就要求有一个支持AOP实现的特殊类装载器;只有发生在运行期,则可直接通过Java语言的反射机制与动态代理机制来动态实现。
术语


评论