JavaWeb基础 – Spring框架、IOC、AOP
1.Spring框架
1.1 介绍
Spring框架是一个轻量级的框架,通过IOC达到松耦合的目的,使用AOP可以分离应用业务逻辑和系统服务进行内聚性的开发(不改变原有逻辑的同时对业务进行增强),不够配置各种组件的时候相对繁琐,因此后面演进除了SpringBoot框架。Spring框架将开发者从原有底层代码中解放出来,使开发者能够将更多的精力放在业务功能的实现上。
2.Spring IOC
2.1 控制反转
IOC即控制反转,一种编程思想,主要指将对象的创建、组装、管理都从代码中自己实现转移至外部容器中实现。在传统的开发方式当中,我们直接手写代码去主动创建和组装对象(将对象所需要的属性注入)。在IOC中由外部容器负责创建和管理对象。
在IOC中,应用程序将会被设计为一个组件,每个组件都有特定功能,并通过接口与其他组件交互。通过IOC容器可以注册这些组件并配置,容器负责根据配置信息创建组件实例,并维护组件之间的依赖关系与生命周期。
2.2 依赖注入
依赖注入指将对象所依赖的其他对象注入到当前对象中,而非由对象自行创建或查找依赖对象。在DI中,对象不负责创建或查找的过程,而是通过构造函数、工厂方法或属性的方式接收依赖对象。这样,依赖对象的创建和管理由外部容器负责,对象只需要专注于自身的功能实现。 依赖注入可以通过构造函数注入、setter方法注入或接口注入等方式来实现。
2.3 联系
IOC是一种设计思想,而依赖注入就是这一思想的体现。 IOC思想提倡将对象的设计与创建交给外部容器,并通过xml配置文件、注解、或者Java Config等方式来描述和配置对象之间的依赖关系, Spring框架提供了一个IOC容器,即ApplicationContext,它就实现类DI的功能。在Spring中,我们可以使用XML配置文件、注解、或Java Config等方式来描述和配置对象之间的依赖关系,然后Spring容器会根据配置信息来创建对象并完成注入。
3.Spring AOP
3.1 简介
AOP即面向切面编程。其目的是将与业务无关但很多业务都需要调用的代码提取出来,其思想就是不侵入原有代码的同时对功能进行增强。AOP通过定义一个切面,该切面可以横切到应用程序的多个模块中,并添加增强的行为。这样就可以将通用的功能逻辑从业务逻辑中提取出来,提高代码可维护性。
AOP由切点和通知组成
- 切点定义的是在程序中的那个位置进行拦截,通常使用表达式来制定匹配的连接点。
- 通知定义了要在切点执行的代码,可以在切点之前、之后或者周围执行特定的逻辑。
- 常见的通知来包括前置通知(Before Advice)、后置通知(After Advice)、异常通知(After Throwing Advice)和环绕通知(Around Advice)等。
3.2 实现过程
AOP基于动态代理实现,分别是JDK和Cglib。JDK动态代理是使用反射实现,调用Proxy类下的newProxyInstance方法来返回代理对象,这个方法中有三个参数,分别是用于加载代理类的类加载器、被代理类实现的接口的class数组、用于增强方法的InvocatioHandler实现类。JDK动态代理要求代理类必须有实现的接口,成的动态代理类会和代理类实现同样的接口。JDK动态代理是Spring默认使用的代理方式。