spring框架的ioc和aop通俗解释

IoC(Inversion of Control)中文名叫控制反转,就是应用自己不负责依赖对象的建立及维护,依赖对象的建立及维护是由外部 容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转,IoC也叫DI,依赖注入,容器负责把依赖的具 体对象注入到上层对象,而上层对象只须要提供一个接口声明。相似于hibernate 一对多关系里面的inverse,把关系维护的重 任交给对方,本身专心业务,与对方如何变化无关,所有由对方(spring容器)来进行维护。 所谓依赖,从程序的角度看,就是好比A要调用B的方法,那么A就依赖于B,反正A要用到B,则A依赖于B。 所谓倒置,你必须理解若是不倒置,会怎么着,由于A必需要有B,才能够调用B,若是不倒置,意思就是A主动获取B的实例:B b = new B(),这就是最简单的获取B实例的方法(固然还有各类设计模式能够帮助你去得到B的实例,好比工厂、Locator等等),而后你就能够调用b对象了。 因此,不倒置,意味着A要主动获取B,才能使用B;到了这里,你就应该明白了倒置的意思了。倒置就是A要调用B的话,A并不须要主动获取B,而是由其它人自动将B送上门来。 形象的举例就是: 一般状况下,假如你有一天在家里口渴了,要喝水,那么你能够到你小区的小卖部去,告诉他们,你须要一瓶水,而后小卖部给你一瓶水! 这原本没有太大问题,关键是若是小卖部很远,那么你必须知道:从你家如何到小卖部;小卖部里是否有你须要的水;你还要考虑是否开着车去;等等等等,也许有太多的问题要考虑了。也就是说,为了一瓶水,你还可能须要依赖于车等等这些交通工具或别的工具,问题是否是变得复杂了?那么如何解决这个问题呢? 解决这个问题的方法很简单:小卖部提供送货上门服务,凡是小卖部的会员,你只要告知小卖部你须要什么,小卖部将主动把货物给你送上门来!这样一来,你只须要作两件事情,你就能够活得更加轻松自在: 第一:向小卖部注册为会员 第二:告诉小卖部你须要什么 是否是和Spring的作法很相似呢?Spring就是小卖部,你就是A对象,水就是B对象 第一:在Spring中声明一个类:A 第二:告诉Spring,A须要B 假设A是UserAction类,而B是UserService类 <bean id="userService" class="org.leadfar.service.UserService"/> <bean id="documentService" class="org.leadfar.service.DocumentService"/> <bean id="orgService" class="org.leadfar.service.OrgService"/> <bean id="userAction" class="org.leadfar.web.UserAction">      <property name="userService" ref="userService"/> </bean> 在Spring这个商店(工厂)中,有不少对象/服务:userService,documentService,orgService,也有不少会员:userAction等等,声明userAction须要userService便可,Spring将经过你给它提供的通道主动把userService送上门来,所以UserAction的代码示例相似以下所示: package org.leadfar.web; public class UserAction{      private UserService userService;      public String login(){           userService.valifyUser(xxx);      }      public void setUserService(UserService userService){            this.userService = userService;      } } 在这段代码里面,你无需本身建立UserService对象(Spring做为背后无形的手,把UserService对象经过你定义的setUserService()方法把它主动送给了你,这就叫依赖注入!) Spring依赖注入的实现技术是:动态代理 --------------------------------------------------- 再说说AOP,即面向切面编程,面向切面编程的目标就是分离关注点。什么是关注点呢,就是你要作的事,就是关注点。假如你是个公子哥,没啥人生目标,每天就是衣来伸手,饭来张口,成天只知道玩一件事!那么,天天你一睁眼,就光想着吃完饭就去玩(你必需要作的事),可是在玩以前,你还须要穿衣服、穿鞋子、叠好被子、作饭等等等等事情,这些事情就是你的关注点,可是你只想吃饭而后玩,那么怎么办呢?这些事情统统交给别人去干。在你走到饭桌以前,有一个专门的仆人A帮你穿衣服,仆人B帮你穿鞋子,仆人C帮你叠好被子,仆人C帮你作饭,而后你就开始吃饭、去玩(这就是你一天的正事),你干完你的正事以后,回来,而后一系列仆人又开始帮你干这个干那个,而后一天就结束了! AOP的好处就是你只须要干你的正事,其它事情别人帮你干。也许有一天,你想裸奔,不想穿衣服,那么你把仆人A解雇就是了!也许有一天,出门以前你还想带点钱,那么你再雇一个仆人D专门帮你干取钱的活!这就是AOP。每一个人各司其职,灵活组合,达到一种可配置的、可插拔的程序结构。 从Spring的角度看,AOP最大的用途就在于提供了事务管理的能力。事务管理就是一个关注点,你的正事就是去访问数据库,而你不想管事务(太烦),因此,Spring在你访问数据库以前,自动帮你开启事务,当你访问数据库结束以后,自动帮你提交/回滚事务!
相关文章
相关标签/搜索