Guide的文章面试被问了几百遍的 IoC 和 AOP ,还在傻傻搞不清楚?写的很容易理解,根据他的思路总结一下.
在Spring中我们经常提到的IOC并不是一个技术实现,而是一种设计理念.描述的是:Java 开发领域对象的创建以及管理的问题。
IOC(Inversion of control)叫做控制反转.
控制:是指对象的创建和管理的权利. 反转:将这种权利交给外部环境(框架或容器).
DI(Dependency Injection)就是依赖注入,是控制反转思想在Spring中实现.大致说下原理,
首先创建IOC容器ApplicationContext(区别于BeanFactory容器),根据XML元数据创建Bean放置到IOC容器中的Map中 如果Bean出现相互依赖的情况时,优先创建被依赖的Bean如果出现循环依赖的情况,先调用无参的构造方法创建对象,然后将对象存储在三级缓存中,然后调用set赋值,来解决循环依赖. 当然也可以通过注解实现Bean的创建,被注解Component修饰,这个类就会被创建为Bean并被托管.scope修改bean的作用范围.然后每次请求容器的时候,根据Bean的名字或者类型实现注入.AOP(Aspect oriented programming)面向切面编程式OOP面向对象编程的延续.
AOP 为什么叫面向切面编程 切 :指的是横切逻辑,原有业务逻辑代码不动,只能操作横切逻辑代码,所以面向横切逻辑 面 :横切逻辑代码往往要影响的是很多个方法,每个方法如同一个点,多个点构成一个面。这里有一个面的概念
在Java中通过继承来实现去除重复代码,实现垂直纵向精简.但是在同一类中的不同方法也可能存在大量的重复逻辑,可以理解为横向代码重复.所有这些重复的代码可以成为一个个的点,无数的点汇聚成一个面.所以需要将这些重复的代码单独取出来.横向的重复代码的场景有:日志,权限校验,事务控制.
AOP可以在不改变原有业务逻辑的情况下,提出横切逻辑代码,根本上解耦合,避免横切逻辑代码重复。