- spring的IOC和AOP
AOP:
作用:给容器中的组件做增强
编程中,对象与对象之间,方法与方法之间,模块与模块之间都是一个个切面。
对某些方法要做参数校验、或者验证是否登录。(这些一般写在Interceptor中,Interceptor是基于aop技术的)
在往常OOP中,有多少个接口就要对多个个接口copy多少次,它导致了大量代码的重复,而不利于各个模块的重用。
而在AOP中,就相当于提出一个公共方法,每个接口都来调用它。
之前做增强是通过oop(面向对象)编程,继承父类(静态代理)或传入委托类对象(动态代理)。
aop是给容器中的组件批量生成代理对象,把要增强的方法放到一起,这个范围称为切面。aop是一个范围更广的增强。
我们知道aop是spring的一个重要特性,他的重要提醒是切面增强,可以在一个方法执行前和执行后增加一些额外的功能,比如执行前进行权限验证,执行后进行方法执行时间统计等。当然可以在一个方法上添加多个拦截,这时候我们可以把拦截器存放在一个list中,在方法执行前,依次执行拦截器的前置增强-执行方法-后置增强。
对具体方法增强时,静态代理无法实现通用性,所以需要需要用到动态代理技术,也就是通过java的反射获得具体的执行方法,在反射调用方法执行前和执行后添加一些逻辑,可以参考网上的其他教程。这里主要介绍添加多个拦截器的spring实现。
IOC用于实例化类对象,管理类对象
IOC:Inverse of Controll 控制反转
控制:实例的生成权
反转:由应用程序反转给spring
容器:容器是放置实例对象的地方 → Spring容器、IOC容器
原先实例我们想用的时候自己new出来(主动的过程);到了Spring阶段,把实例的生成权交给了Spring容器,由Spring容器进行生成并管理,当我们想用的时候就从容器中取出来。
DI:Dependency Injection 依赖注入
依赖:
谁依赖谁? 应用程序依赖Spring容器
为什么依赖? Spring容器包含了应用程序必须的内容
注入:
谁注入谁? Spring容器注入给应用程序
注入了什么?应用程序运行所必须的资源