我理解的IoC和AOP
2008-09-10 16:14
134 查看
由于,我自己也只是看过一些这方面的文章,没有实作过,所以在这篇文章里面将不会设计到太多实现上的细节,基本上都是一些概念上和我个人理解的东西。 这两个概念基本上是一个设计层的概念,主要讲的就是怎么去分离关注,用面向对象的话说,就是怎么把职责进行分离。而这两个模式,我个人认为都有一个共同点,就是变以前的主动为被动,而我认为,这种改变可能也是将来面向对象发展的一个趋势。 首先说说什么叫主动。写过面向对象程序的人都知道,面向对象与面向过程的区别就是,面向对象是由一大堆对象组成的,对象通过协作完成面向过程中的任务。假设现在有对象A和B,那么当A需要使用B中的方法时,那么在A内部,就会有有一个对B方法的调用,这种调用就称为主动调用。代码大概会如下: public class A{ B b; public void methodA(){ b.methodB(); } } 这里为了下文解释方便,我增加了一个调用点的定义,调用点就是调用发生的地方。也就是上面 b.methodB()中的b。 理解了什么叫主动之后,我想就先介绍什么叫IoC。IoC的全称这里就不说了,他的字面意思就是控制反转。在上面的代码当中,由于A调用了B的方法,因此就形成了一个A对B的依赖,这本身并没有什么问题。但是OO的思想是希望我们基于接口编程,而不是基于实现编程。因此,系统设计将不止是原有的A,B,而需要变成IA,IB,A,B,其中IA,IB是接口,A,B是对应的实现类,然后为了使得A中现在对B的实现依赖变成对接口的依赖,代码应该变成这样。 public class A implements IA{ IB b; public void methodA(){ b.methodB(); } } 这里虽然我们是基于接口编程了,但大家知道,在这中间,我们需要有一个步骤把b指向一个IB的实现类B,这个怎么做,就是IoC要做的事情,这里就不细说了。但简单来说,没有IoC,我们可能需要在A中通过某种方法去获取一个B的实例,但有了IoC,她就能在A不参与的情况下,给我们一个B的实例,所以,IoC要做的就是在调用点上从原来的主动生成一个调用点,变成被动的接受一个调用点。 接着就是AOP,全称也不说了,字面意思就是面向方面编程。举一个最普遍的例子,就是如果我们代码需要做日志的话,那么在没有AOP的时候,我们的代码可能就是这样: public class A{ public void methodA(){ do log; b.methodB(); } } 这里methodA()中的做日志并不是方法本身的逻辑功能,而是一个附属功能,因此,我们需要把它分离出去。怎么分离,就是AOP要做的事情,简单来说,就是系统在调用者不知情的情况下,为我们的类A增加了一个代理类,她把我们的类A包装了起来,像这样: public class AP extends A{ A a; public void methodA(){ do log; a.methodA(): } } public class A{ public void methodA(){ b.methodB(); } } 于是,当我们以为自己在调用A的methodA()方法时,实际调用的将是AP中的methodA(),于是就可以把做日志的功能从原有的methodA()中分离了出去。所以,AOP要做的就是在用户不知道的情况下,将我们的调用点包裹了起来,从而把原来的功能进行了分离。 这个基本上就是我对IoC和AOP的看法。欢迎指正。 |
相关文章推荐
- 抛弃隐晦,明了的理解Spring IOC与AOP
- Spring的IoC与AOP的理解
- Spring面试,IoC和AOP的理解
- 深入理解Spring的两大特征(IOC和AOP)
- 深入理解Spring的两大特征(IOC和AOP)
- Spring面试,IoC和AOP的理解
- 详细谈一下对IOC跟AOP的详细理解
- 学习AOP之透过Spring的Ioc理解Advisor
- Spring面试,IoC和AOP的理解
- Spring中IoC和AOP的理解
- Spring IoC和AOP的理解
- Spring核心IoC和AOP的理解
- 详细谈一下自己对IOC跟AOP的详细理解
- IOC和AOP概念理解总结
- ######【spring属性注入(Ioc的DI)总结】:注解方式属性注入,属性名任意.=for理解:Aop注入代理对象时,注入被增强类对象时,属性名为proxy(自定义)。
- Spring面试:IOC和AOP的理解
- Spring面试,IoC和AOP的理解
- Spring面试,IoC和AOP的理解
- 面试中Spring IOC AOP的理解
- 关于对Spring中IOC与AOP的理解