`

Spring之IOC

阅读更多

 

.1 如何获取 spring

       登陆 http://www.springframework.org下载 spring 开发包。

快速应用 spring 核心 IOC 实例

 

Spring IOC 容器讲解

       控制反转 IoC(Inversion of Control) ioc 是一种编程思想,主要是协调各组件间相互的依赖关系。 Ioc 就是由容器来控制业务对象之间的依赖关系,而非传统方式中由代码来直接操控,控制反转的本质,是控制权由应用代码转到了外部容器,控制权的转移即是所谓的反转,控制权的转移带来的好处就是降低了业务对象之间的依赖程度,即实现了解耦。

       对象的创建一共有三种:自己创建,工厂模式创建,外部注入。对应三个动词: new get set

       New --- 自己创建

       Get --- 工厂模式

 

优点:实现了对象的统一创建,调用者无须关心对象创建的过程,只管从工厂中取得即可

 

     Set--- 外部注入

 

       Ioc 模式的优缺点

       优点:

IOC 把对象放在了 XML 中定义,所以当我们需要换一个实现子类将会变得很简单(一般这样的对象都是实现于某种接口的),只要修改 XML 就可以了。

       缺点:

<!-- [if !supportLists]-->l         <!-- [endif]-->生成一个对象的步骤变的复杂了,对于不习惯这种方式的人,会觉得有些别扭和不直观。不过这种复杂都已经被容器实现了,对于使用现有的 IOC 容器进行应用开发的人员来说,使用确实相当简单。

<!-- [if !supportLists]-->l         <!-- [endif]-->对象生成因为是使用反射编程,在效率上有些损耗。但相对于 ioc 提高的维护性和灵活性来说,这点损耗是微不足道的。

 

Spring IOC 容器配置详解

            依赖注入 DI(dependency injection) 模式

类型名称

类型名称

描述

项目

Type1

接口注入

服务需要实现专门的接口,通过接口,有对象提供这些服务。

J2EE,

Type2

构造注入

使依赖性以构造函数的形式提供,不以 javabean 属性的形式公开

Spring

Type3

设置注入

通过 javabean 的属性(例如 setter 方法)分配依赖性

Spring

 

1.         <!-- [endif]-->type1 接口注入

我们开发一个 InjectUserDao 接口,它的用途是将一个 UserDao 实例注入到实现该接口的类中。

InjectUserDao 接口 代码如下:

public interface InjectUserDao {


   	 	public void setUserDao(UserDao userDao);


}


UserRegister需要容器为它注入一个UserDao的实例,则它必须实现InjectUserDao接口。UserRegister部分代码如下:


public class UserRegister implements InjectUserDao{


   	 	private UserDao userDao = null;//该对象实例由容器注入


    		public void setUserDao(UserDao userDao) {


        		this.userDao = userDao;


    		}


// UserRegister的其它业务方法


}


2.	type2 构造注入


public class SetStudent {


	private Problem problem;


		public Student(Problem problem) {


			this.problem = problem;


}


		public void resolveProblem() {


			System.out.print(problem.displayMessage()+"\r");


	}


}


 对应的配置文件:

 

 

<bean id="Problem" class="com.example1.Problem">


		<property name="title" >


			<value>problem title</value>


		</property>


	</bean>


	<bean id="Student" class="com.example1.Student">


		<constructor-arg ref="problem"></constructor-arg>


	</bean>


  3.    type3 设值注入

3.	type3 设值注入
public class SetStudent {
	private Problem problem;
	public Problem getProblem() {
		return problem;
	}
	public void setProblem(Problem problem) {
		this.problem = problem;
	}
	public void resolveProblem() {
		System.out.print(problem.displayMessage()+"\r");
}
}

 对应的配置文件:

<bean id="ProblemA" class="com.example1.ProblemA">
		<property name="title" >
			<value>problem title</value>
		</property>
	</bean>

<bean id="ProblemB" class="com.example1.ProblemB">
		<property name="title" >
			<value>problem title</value>
		</property>
	</bean>
	
	<bean id="Student" class="com.example1.Student">
		<property name="problem" ref="ProblemA" />
	</bean>

<bean id="StudentA" class="com.example1.StudentA">
		<property name="problem" ref="ProblemA" />
	</bean>

<bean id="StudentB" class="com.example1.StudentB">
		<property name="problem" ref="ProblemC" />
	</bean>

 

3 种类型的对比

接口注入模式具有侵入性,一般情况不使用,这里不加说明

2.       <!-- [endif]-->type2 构造注入的优势

在构造期即创建一个完整、合法的对象 。对于这条 java 设计原则, type2 无疑是最好的响应者

避免了烦琐的 setter 方法的编写,所有依赖关系均在构造函数中设定,依赖关系集中呈现,更加易读。

由于没有 setter 方法,依赖关系在构造时由容器一次性设定,因此组件在被创建之后对组件“不变”的稳定状态,无须担心上层代码在调用过程中执行 setter 方法对组件依赖关系产生破坏,特别是对于 singleton 模式的组件而言。这可能对整个系统产生重大的影响。

由于关联关系仅在构造函数中表达,只有组件创建者需要关心组件内部的依赖关系。对于调用者而言,组件中的依赖关系处于黑盒之中。对上层屏蔽不必要的信息,也为系统的层次清晰性提供了保证。

通过构造子注入,意味着我们可以在构造函数中决定依赖关系的注入顺序,对于一个大量依赖外部服务的组件而言,依赖关系的获得顺序可能非常重要。

设置注入的优势

对于习惯了传统的 javabean 开发的程序员来说,通过 setter 方法设定依赖关系显得更加直观。更加自然

如果依赖关系较为复杂, type2 模式的构造函数也会相当的庞大,这样 type3 模式往往更加简洁

对于某些第三方类库而言,可能要求我们的组件必须提供一个默认的构造函数。此时 type2 类型的依赖注入机制就体现出其局限性。

 

 

 

 

分享到:
评论

相关推荐

    Spring之IOC示例

    在IT行业中,Spring框架是Java开发领域中一个极为...通过阅读《Spring之IOC示例》这篇博客(博文链接:https://huangminwen.iteye.com/blog/1041298),可以更深入地理解Spring的IOC机制,并学习如何在实际项目中应用。

    Spring 之IoC入门实例

    **Spring之IoC入门实例详解** 在Java世界中,Spring框架以其强大的依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)能力而广受赞誉。IoC是一种设计模式,它将对象的创建和...

    springIoc实现原理

    Spring Ioc(Inversion of Control,控制反转)是Spring框架的核心特性之一,它改变了传统应用程序中对象的创建和管理方式。在传统的软件设计中,对象的创建和依赖关系的维护通常由代码自身来完成,而在Spring Ioc中...

    Spring中IoC优点与缺点解析

    Spring 中 IoC 优点与缺点解析 IoC(Inversion of Control)是 Spring 框架中的一种设计模式,它的主要思想是将对象的创建和管理交给容器,从而解耦合对象之间的依赖关系。今天,我们将详细解析 IoC 的优点和缺点。 ...

    spring之ioc和aop

    IoC是Spring的核心特性之一,它的基本思想是将对象的创建和管理权交给容器,而不是由对象自身负责。在传统编程中,对象通常会自行创建依赖的对象,而在IoC中,对象的依赖关系由外部容器(如Spring的...

    Spring-ioc-jar

    Spring IOC,全称为Inversion of Control,中文常被称为“控制反转”,是Spring框架的核心特性之一。这个概念在软件设计中引入了一种新的依赖管理方式,它将对象的创建和管理权交给了容器,使得开发者可以更专注于...

    模拟实现Spring的IOC

    模拟实现__Spring的Ioc 1、Spring主要两个作用:实例化Bean,动态装配Bean。并将所有的bean放到spring容器中,调用时从容器中取。Spring容器就是一个bean的Map:private Map, Object&gt; beans = new HashMap, Object&gt;...

    spring_ioc

    这是spring_ioc部分的内容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...

    J2EE企业级项目开发-3期(KC007) 7.2 精解Spring之IoC原理与具体使用文档.docx

    【Spring的IoC原理与具体使用】 IoC(Inversion of Control,控制反转)是Spring框架的核心设计理念,它改变了传统Java应用程序中对象的创建和管理方式。在IoC模式下,对象的创建和依赖关系不再由对象自身负责,...

    模拟Spring的IOC

    在Java世界中,Spring框架以其强大的依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IOC)能力,成为企业级应用开发的首选框架之一。理解并模拟Spring的IOC机制对于深入学习Spring...

    Spring源码分析_Spring_IOC

    在探讨Spring框架的核心组件之一——IOC(Inversion of Control,控制反转)容器之前,首先需要理解它在Spring框架中的角色与地位。对于Spring的使用者而言,IOC容器不仅是管理Bean(即应用中的对象实例)生命周期的...

    Spring的ioc小案例

    本案例主要探讨的是Spring框架的核心特性之一——依赖注入(Dependency Injection,简称DI),通常也被称为IOC(Inversion of Control,控制反转)。通过这个小案例,我们可以深入理解Spring如何实现IoC以及属性注入...

    Spring-IOC笔记

    spring-IOC的一些笔记心得

    以注解方式模拟Spring IoC AOP

    依赖注入是Spring框架的核心特性之一,它通过反转对象创建和管理的控制权,使得应用程序组件之间的耦合度降低。在Spring中,通常通过以下三种注解实现IoC: - `@Autowired`:自动装配,Spring会根据类型或名称找到...

    Spring-IOC实现

    Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它将对象的创建和管理权交由Spring容器处理,使得开发者可以更专注于业务逻辑的编写,而不是对象的生命周期管理。下面,我们将深入探讨Spring...

    Spring的IoC实现案例

    在本文中,我们将深入探讨如何使用Spring的Inversion of Control(IoC)容器来实现一个具体的案例:控制打印机(Printer)类与不同类型的纸张(Paper)类的交互。Spring的IoC允许我们解耦组件,使代码更加灵活且易于...

    Spring_IOC-v(上)笔记

    IoC 技术是 Spring 框架的核心概念之一,它的主要思想是将对象的创建和管理交给容器来管理,而不是由对象自己来管理。这样可以降低对象之间的耦合度,提高系统的灵活性和可维护性。 在 Spring 中,IoC 通过依赖...

    Spring_IOC详解.pdf

    Spring框架作为Java企业级应用开发的基石,其核心组件之一便是IOC(Inverse of Control)容器。IOC容器负责管理应用程序中的对象及其依赖关系,实现了控制反转,极大地简化了Java应用的开发流程。本文将基于Spring...

    spring ioc

    Spring 是一个广泛应用的 Java 应用开发框架,其核心特性之一就是IOC,它极大地简化了软件组件之间的依赖管理。在本文中,我们将深入探讨 Spring IOC 的概念、工作原理以及如何在实际项目中应用。 首先,理解 IOC ...

Global site tag (gtag.js) - Google Analytics