用了spring也很久了,对IOC和AOP的理解还是很模糊 :
1.IOC 控制反转也叫依赖注入,我的理解是在spring配置文件中配置相应的bean,同时也可以设置相关的属性,
  让spring容器来生成类的实例对象,并进行管理。但是对象不应该都由Java虚拟机进行的管理的吗?2.AOP很陌生,就是在配置spring事务管理,使用自动代理的时候有印象,如:
<!-- 配置BeanName自动代理 -->
<bean
class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
<property name="beanNames">
<value>*Service</value>
</property>
<property name="interceptorNames">
<value>transactionInterceptor</value>
</property>
</bean>在网上也看很多资料,对IOC和AOP的理解还是很模糊,特别是AOP在实际中的应用,感觉没接触过。
请教大家有关IOC和AOP概念的理解,最好能举例子说明IOC和AOP的实际应用。

解决方案 »

  1.   

    IOC控制反转也叫依赖注入,我的理解是比如你在做一辆汽车你需要轮胎玻璃油箱车门等等组建,ioc就是帮你把这些组建组合起来。
      AOP是面向方面编程,简单点解释,比方说你想在你的biz层所有类中都加上一个打印‘你好’的功能这你经可以用aop思想来做,你先写个类写个方法,方法经实现打印‘你好’让后你Ioc这个类 ref=“biz.*”让每个类都注入。这就是面向方面编程。
                                            个人理解,只可参照。希望理解比我好的人也说说看法
      

  2.   

    IoC在Spring里面是这样的:
    在Spring启动的时候,Spring会把你在配置文件里面配置的bean都初始化好,然后在你需要调用的时候,就把它已经初始化好的那些bean分配给你需要调用这些bean 的类(假设这个类名是A),分配的方法就是调用A的set方法来注入进去,而不需要你在A里面new这些bean了。
      

  3.   

    1. 先要理解什么是依赖关系,一个类“知道”另一个类。这种情况,在具体编码中,往往是要显式的调用类名来构造,这违反了面向对象原则中依赖倒置原则,现在让spring来处理这些,意味着你不再显式的处理这些关系了,就是控制反转了。有句话叫Don't call us, we'll call you,这在牒战片中经常出现,单线联系。同时,spring还控制了bean的生命周期,我们可以设置成singleton,prototype,跟业务有关你还可以设置成request,session,也可以定义生命周期。而Java虚拟机进行的管理不是同一个层次上的概念,在虚拟机中的管理是操作系统意义上的管理,比如内存管理等。Spring是为了解决对象与对象的依赖关系而管理对象的,目的就是为了易于测试。我接触过的IOC容器有picocontainer, guice,你可以先了解一下简单的picocontainer.
      

  4.   

    是不是IOC就是注入属性值,而AOP就是拦截器或者过滤器是这样吗?
      

  5.   

    IOC就是让spring生成实例对象,并设置有关的属性值,有个疑问是这些对象是spring管理的还是JVM管理的?
      

  6.   

    AOP不是拦截器或者过滤器,就是你要在几个类或多个类添加一个相同的功能的时候经就可以使用aop思想
    IOC就是注入属性值。偏离的不远暂时可以这么理解,接触久了你会懂的
      

  7.   

    恩,这个明白了,AOP的概念还是很模糊。
      

  8.   

    2. AOP....
    和meta-program有关系,meta-program就是用代码生成代码。
    当应用分层了以后,大牛们还是能发现某些功能是贯穿于每层的(比如捕获异常、日志输出等),就像一个个切片(Pointcut)一样。我们说一个方法一次只做一件事并把他做好,但是往往我们的方法中会有捕获异常、日志输出这样的逻辑与业务逻辑混杂。所以高人们就用meta-programming来将这些逻辑放在应该放的地方。
      

  9.   

    结合一个spring的小项目去看,会不会好点
      

  10.   

    IOC很简单的吧,将对象交给容器管理,你需要的时候(也就是你类里有setXXX的时候)spring容器会自动为你注入。AOP,说通俗点就是将共通的部分抽象出来,单独实现,然后切入到你想执行的地方。举个例子吧!
    把类当做一条直线,java开发讲究的是低耦合,低耦合到极限的时候就是线与线都是平行的,无任何交叉,交叉就代表着依赖。有一个共通的操作要在所有平行线上执行,这样就产生了交叉。AOP的功能就是将这条交叉的线独立出来,人为的放置平行,但功能还是原来的功能!
      

  11.   

    是的IOC就是把对象给容器来管理 AOP是反转模式 你注入什么他就给你什么
      

  12.   

    IOC 就是吧 XML通过反射把对象实例化 然后让容器管理  
    AOP 面向切面编程 就像写一个方法然后反复的利用它把他们的共同的东西提取出来然后用的时候直接嵌入在某个类中