做网站最烂公司,科技企业网站设计,深圳市做门窗网站有哪些推广,如何微信小程序注册IOC#xff08;控制反转#xff09;
IoC#xff08;Inversion of Control#xff0c;控制倒转#xff09;。所谓IoC#xff0c;对于spring框架来说#xff0c;就是由spring来负责控制对象的生命周期和对象间的关系。
在没有IOC时#xff0c;我们通过new 等关键字等方…IOC控制反转
IoCInversion of Control控制倒转。所谓IoC对于spring框架来说就是由spring来负责控制对象的生命周期和对象间的关系。
在没有IOC时我们通过new 等关键字等方式自己实例化对象。而使用IOC只需要通过IOC容器去获取对象所有的类的创建、销毁都由spring来控制也就是说控制对象生存周期的不再是引用它的对象而是spring。
IOC容器
Spring中提供了两种IoC容器
BeanFactoryApplicationContext
两个容器间的关系如下图
ApplicationContext是BeanFactory的子类所以ApplicationContext可以看做更强大的BeanFactory。
无论使用哪个容器我们都需要通过某种方法告诉容器关于对象依赖的信息Spring提供以下几种配置对象依赖信息的方式
通过注解来配置类和类的依赖关系通过XML来配置类和类的依赖关系通过编写代码来配置类和类的依赖关系
Spring IOC的过程
Spring的IoC容器在实现控制反转和依赖注入的过程中,可以划分为两个阶段:
容器启动阶段Bean实例化阶段 在上述两个阶段Spring提供了一种叫做BeanFactoryPostProcessor的容器扩展机制。该机制允许我们在容器实例化相应对象之前对注册到容器的BeanDefinition所保存的信息做相应的修改比如我们可以修改其中bean定义的某些属性为bean定义增加其他信息等。
容器扩展机制具体参考细说Spring——IoC详解深入IoC实现
容器启动阶段
1加载配置文件信息
容器创造对象的第一步就是加载配置文件信息我们已经知道我们主要通过xml文件和注解的方式来告诉容器对象间的依赖信息。
2解析配置生成BeanDefinition
在BeanFactory容器中每一个注入对象都对应一个BeanDefinition实例对象该实例对象负责保存注入对象的所有必要信息包括其对应的对象的class类型、是否是抽象类、构造方法参数以及其他属性等。当客户端向BeanFactory请求相应对象的时候BeanFactory会通过这些信息为客户端返回一个完备可用的对象实例。
Spring通过使用加载解析配置文件的类BeanDefinitionReader读取配置文件并解析之后将解析后的文件内容映射到相应的BeanDefinition。
Bean实例化阶段
实例化流程图 AOP面向切面编程
AOP(Aspect Oriented Programming面向切面编程)是一种编程范式提供从另一个角度来考虑程序结构以完善面向对象编程OOP
AOP能够将那些与业务无关却为业务模块所共同调用的逻辑或责任例如事务处理、日志管理、权限控制等封装起来便于减少系统的重复代码降低模块间的耦合度并有利于未来的可操作性和可维护性。
AOP相关概可以参考细说Spring——AOP详解AOP概览
Spring默认采取的动态代理机制实现AOP当动态代理不可用时代理类无接口会使用CGlib机制。
但Spring的AOP有一定的缺点
只能对方法进行切入不能对接口字段静态代码块进行切入切入接口的某个方法则该实现该接口的所有方法都会被切入。同一个类中的方法互相调用将不会使用代理类即同一个类的方法相互调用不能触发AOP。
AOP的详细实现机制AOP的实现机制
参考
重点好文细说Spring面试问烂的 Spring AOP 原理、SpringMVC 过程理解Spring的AOP和IOC实现原理我对AOP的理解