Ioc的做用

IoC能够认为是一种全新的设计模式,可是理论和时间成熟相对较晚,并无包含在GoF中。编程

Interface Driven Design接口驱动,接口驱动有不少好处,能够提供不一样灵活的子类实现,增长代码稳定和健壮性等等,可是接口必定是须要实现的,也就是以下语句早晚要执行:AInterface a = new AInterfaceImp(); 这样一来,耦合关系就产生了。设计模式

Spring经过这种控制反转(IoC)的设计模式促进了松耦合。当应用了IoC,一个对象依靠的其它对象会经过被动的方式传送进来,而不是这个对象本身建立或者查找依靠对象。不是对象从容器中查找依靠,而是容器在对象初始化时不等对象请求就主动将依靠传送给它。咱们能够把IoC模式看作是工厂模式的升华,能够把IoC看做是一个大工厂,只不过这个大工厂里要生成的对象都是在XML文件中给出定义的,而后利用Java的“反射”编程,根据XML中给出的类名生成相应的对象。从实现来看,IoC是把之前在工厂方法里写死的对象生成代码,改变为由XML文件来定义,也就是把工厂和对象生成这二者独立分隔开来,目的就是提升灵活性和可维护性。服务器

1.依赖查找

容器提供回调接口和上下文条件给组件。EJB和Apache Avalon 都使用这种方式。这样一来,组件就必须使用容器提供的API来查找资源和协做对象,仅有的控制反转只体如今那些回调方法上(也就是上面所说的 类型1):容器将调用这些回调方法,从而让应用代码得到相关资源。架构

容器中的受控对象经过容器的API来查找本身所依赖的资源和协做对象。这种方式虽然下降了对象间的依赖,可是同时也使用到了容器的API,形成了咱们没法在容器外使用和测试对象。依赖查找是一种更加传统的IoC实现方式。框架

<bean id="accountService4" class="com.luban.service.impl.AccountServiceImpl" scope="prototype"</bean>

 

2.依赖注入

组件不作定位查询,只提供普通的Java方法让容器去决定依赖关系。容器全权负责的组件的装配,它会把符合依赖关系的对象经过JavaBean属性或者构造函数传递给须要的对象。经过JavaBean属性注射依赖关系的作法称为设值方法注入(Setter Injection);将依赖关系做为构造函数参数传入的作法称为构造器注入(Constructor Injection)。函数

Spring是一个开源轻量级框架,于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著做Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而建立的。框架的主要优点之一就是其分层架构,分层架构容许使用者选择使用哪个组件,同时为 J2EE 应用程序开发提供集成的框架。测试

Spring使用基本的JavaBean来完成之前只可能由EJB完成的事情。然而,Spring的用途不只限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用均可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。编码

Spring 能有效地组织J2EE应用各层的对象。不论是控制层的Action对象,仍是业务层的Service对象,仍是持久层的DAO对象,均可在Spring的 管理下有机地协调、运行。Spring将各层的对象以松耦合的方式组织在一块儿,Action对象无须关心Service对象的具体实现,Service对 象无须关心持久层对象的具体实现,各层对象的调用彻底面向接口。当系统须要重构时,代码的改写量将大大减小。
上面所说的一切都得宜于Spring的核心机制,依赖注入。依赖注入让bean与bean之间以配置文件组织在一块儿,而不是以硬编码的方式耦合在一块儿。spa

<bean id="accountService" class="com.luban.service.impl.AccountServiceImpl"
  scope="singletion" init-method="init" destroy-method="destroy"></bean>prototype

<bean id="accountService" class="com.luban.service.impl.AccountServiceImpl"
  scope="prototype" init-method="init" destroy-method="destroy"></bean>

-END-

相关文章
相关标签/搜索