spring 为什么要做ioc和aop

诺灬晓月 发布于 2013/06/04 17:11
阅读 668
收藏 2

我一直觉得ioc和aop之间是互相依存的关系.

但今天和别人讨论的时候有人打翻了我的观点.

我也查看了一些资料,但没有具体说两者之间联系的.

所以我想问既然spring把两者集合到一起做为其核心,那么ioc和aop之间有联系么?

加载中
0
HZ先生
HZ先生
因为方便所以抠代码,节约时间泡妹子
1
前端大师傅
前端大师傅

楼上的朋友都答的不错,但在下觉得这只是在作翻译,如果只是翻译百度翻译就可以了,在下来说下对AOP及IOC的理解:

AOP直译是面向切面,那是什么意思呢,在下来解释:

写代码如果分模块来开发的话大家都知道有两种分法,横向一个管理系统可分为用户模块,评论模块。而纵向可分为前端视图层,业务逻辑,数据处理等,那AOP里所谓的面向切面中的这个切面指的就是这个纵向模块中的每一个模块。最简单就是拦截器的实现,就是基于AOP,在没扔拦截器时你要做一个权限验证,即在访问每个路由方法时都需要验证是否有这个权限,那需要在所有的地方都去写这个验证的方法,即使你说封装成方法,那也要多一行代码去调用这样只要有一个action请求就需要去调用一次,而如果有了AOP的思想,你就可以实现一个AOP方法,即只需要写一个拦截器的类去实现相应类型的拦截接口,把需要验证的方法写在里面就可以完成。这就是AOP的核心。

IOC直译反转控制,很简单就是为了解除依赖,依赖的意思是这样:

class A { private B b;}

这样A这个类对B类形成了依赖!也就是B这个类以后被咪西了也就o了。

百分之80的初学者写代码会形成这样的依赖。IOC的思想就是要解除依赖,实现就是这样


class A{

private IB b;

}

可以看出用接口IB来代替原来的类B

这样的好处就是IB提供的方法没有被实现。而交由调用A类的类去实现IB的方法。这就是IOC。

class Test impletements IB{
   void run(){
      A a = new A();
      
   }

   void b定义的方法(){
      
   }

}

 

0
j
jj402268348
没有必然联系。。。一个是反向控制一个是面向切面编程。。。有关系么??
0
夜闻香
夜闻香
不用ioc你的aop对象怎么弄?
kidbei
kidbei
回复 @夜闻香 : 那我还直接说了叫你参考jfinal的aop呢
夜闻香
夜闻香
晕倒,你直接说拦截器不就好了
kidbei
kidbei
回复 @夜闻香 : Interceptor 是 JFinal AOP的实现 方试,文档咋看的....
kidbei
kidbei
回复 @夜闻香 : jfinal用户手册1.4 4.1概述,第四章 Interceptor
夜闻香
夜闻香
刚才翻了一遍jfinal的文档,没看到aop的内容
下一页
0
j
jj402268348

引用来自“夜闻香”的答案

不用ioc你的aop对象怎么弄?
struts的拦截器也是aop思想,没用什么ioc吧??
夜闻香
夜闻香
这个~~~回调能算aop么?完全是两种设计模式吧。aop主要目的是类还是那个类,只是为指定方法增加了一些事前事后处理。而别的设计方法出来的aop则是为实现包了一层类似运行时环境的容器。
0
x
xsong

还是有关系的.  

想想aop是怎么实现的, 就是把所有的代码都放在一个叫容器的盒子里.

通过 ioc 调用对象, aop才会起作用的

kidbei
kidbei
自己写动态代理,也可以让AOP起作用。当然,你也可以认为自己写动态代理实现bean组装也是自己实现了一个IOC
0
黑狗
黑狗
没关系
0
小白小霸王
小白小霸王
老外工作都比较轻松 闲的蛋疼 乱搞的
0
panmingguang
panmingguang

没关系,  默认AOP实现用的就是 java 动态代理,

如果用cglib 才会有类代理, IOC 只是用于 类的解耦, 不用IOC, 照样用AOP, 只是在需要的时候实例化就好了, 就是可能没有 单列, 单列 用static map 照旧实现

kidbei
kidbei
yes,这是很好的回答,嘿嘿
0
王瑞平
王瑞平

离了谁地球都转

返回顶部
顶部