Spring框架中ioc和aop实现原理是什么?
1、IOC:
1.1指的是容器控制程序对象之间的关系,且控制权由应用代码中转到了外部容器,控制权的转移就是所谓的控制反转。组件之前的依赖关系由容器在运行期决定,即由容器动态块将某种依赖关系注入到组件中,即ioc的依赖注入。
1.2所有的类的创建、销毁都由spring来控制,即控制对象生命周期的不再是引用它的对象,而是spring。
1.3依赖注入是通过通过反射机制实现的,实例化类时,它通过反射调用类中set方法将实现保存在HashMap中的类属性注入到类中。传统的对象创建方式中,是由调用者来创建被调用者的实例,而spring中创建被调用者的工作由Spring来完成,然后注入调用者,即所谓的依赖注入(控制反转)。注入的方式有:构造方法注入,setter注入,基于注解的注入。
ioc的优点:降低了组件之间的耦合,降低了业务对象之间替换的复杂性,使之能够灵活的管理对象。
2、AOP:
2.1aop的术语:
2.1.1通知:(Advice)业务模块功能,即安全,事物,日志等。
2.1.2连接点(JoinPoint)即spring允许你使用通知的地方,每个方法的前后,抛出的异常,spring只支持方法的连接点。即和方法有关的前前后后(抛出异常)都是连接点。
2.1.3切入点(Pointcut)在连接点的基础上,来定义切入点,例如:一个类里面有15个方法,按道理要有15个连接点,若你只想其中几个方法之前,之后或者抛出异常时干点什么,那就用切点来定义这几个方法,让切点来筛选连接点,选中那几个你想要的方法。
2.1.4切面(Aspect) 是通知和切入点的结合。结合之前的术语:通知说明了干什么和说明时候干(什么时候通过方法名中的before、after、around等就能知道),而切入点说明了在哪干(指定到底是那个方法),这就是完成的切面定义。
2.2AOP 利用一种称为“切面”的技术,将多个类的公共方法封装到一个模块中。即是将那些与业务无关,却为业务模块所共有调用的逻辑。比如权限控制,日志记录。以此来减少系统代码的重复性,降低模块间的耦合度。
2.3实现AOP主要有基于XML配置的Spring AOP 和使用注解配置AOP: