.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
类型的依赖注入机制就体现出其局限性。
分享到:
相关推荐
在IT行业中,Spring框架是Java开发领域中一个极为...通过阅读《Spring之IOC示例》这篇博客(博文链接:https://huangminwen.iteye.com/blog/1041298),可以更深入地理解Spring的IOC机制,并学习如何在实际项目中应用。
**Spring之IoC入门实例详解** 在Java世界中,Spring框架以其强大的依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IoC)能力而广受赞誉。IoC是一种设计模式,它将对象的创建和...
Spring Ioc(Inversion of Control,控制反转)是Spring框架的核心特性之一,它改变了传统应用程序中对象的创建和管理方式。在传统的软件设计中,对象的创建和依赖关系的维护通常由代码自身来完成,而在Spring Ioc中...
Spring 中 IoC 优点与缺点解析 IoC(Inversion of Control)是 Spring 框架中的一种设计模式,它的主要思想是将对象的创建和管理交给容器,从而解耦合对象之间的依赖关系。今天,我们将详细解析 IoC 的优点和缺点。 ...
IoC是Spring的核心特性之一,它的基本思想是将对象的创建和管理权交给容器,而不是由对象自身负责。在传统编程中,对象通常会自行创建依赖的对象,而在IoC中,对象的依赖关系由外部容器(如Spring的...
Spring IOC,全称为Inversion of Control,中文常被称为“控制反转”,是Spring框架的核心特性之一。这个概念在软件设计中引入了一种新的依赖管理方式,它将对象的创建和管理权交给了容器,使得开发者可以更专注于...
模拟实现__Spring的Ioc 1、Spring主要两个作用:实例化Bean,动态装配Bean。并将所有的bean放到spring容器中,调用时从容器中取。Spring容器就是一个bean的Map:private Map, Object> beans = new HashMap, Object>...
这是spring_ioc部分的内容。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。...
【Spring的IoC原理与具体使用】 IoC(Inversion of Control,控制反转)是Spring框架的核心设计理念,它改变了传统Java应用程序中对象的创建和管理方式。在IoC模式下,对象的创建和依赖关系不再由对象自身负责,...
在Java世界中,Spring框架以其强大的依赖注入(Dependency Injection,简称DI)和控制反转(Inversion of Control,简称IOC)能力,成为企业级应用开发的首选框架之一。理解并模拟Spring的IOC机制对于深入学习Spring...
在探讨Spring框架的核心组件之一——IOC(Inversion of Control,控制反转)容器之前,首先需要理解它在Spring框架中的角色与地位。对于Spring的使用者而言,IOC容器不仅是管理Bean(即应用中的对象实例)生命周期的...
本案例主要探讨的是Spring框架的核心特性之一——依赖注入(Dependency Injection,简称DI),通常也被称为IOC(Inversion of Control,控制反转)。通过这个小案例,我们可以深入理解Spring如何实现IoC以及属性注入...
spring-IOC的一些笔记心得
依赖注入是Spring框架的核心特性之一,它通过反转对象创建和管理的控制权,使得应用程序组件之间的耦合度降低。在Spring中,通常通过以下三种注解实现IoC: - `@Autowired`:自动装配,Spring会根据类型或名称找到...
Spring IOC(Inversion of Control,控制反转)是Spring框架的核心特性,它将对象的创建和管理权交由Spring容器处理,使得开发者可以更专注于业务逻辑的编写,而不是对象的生命周期管理。下面,我们将深入探讨Spring...
在本文中,我们将深入探讨如何使用Spring的Inversion of Control(IoC)容器来实现一个具体的案例:控制打印机(Printer)类与不同类型的纸张(Paper)类的交互。Spring的IoC允许我们解耦组件,使代码更加灵活且易于...
IoC 技术是 Spring 框架的核心概念之一,它的主要思想是将对象的创建和管理交给容器来管理,而不是由对象自己来管理。这样可以降低对象之间的耦合度,提高系统的灵活性和可维护性。 在 Spring 中,IoC 通过依赖...
Spring框架作为Java企业级应用开发的基石,其核心组件之一便是IOC(Inverse of Control)容器。IOC容器负责管理应用程序中的对象及其依赖关系,实现了控制反转,极大地简化了Java应用的开发流程。本文将基于Spring...
Spring 是一个广泛应用的 Java 应用开发框架,其核心特性之一就是IOC,它极大地简化了软件组件之间的依赖管理。在本文中,我们将深入探讨 Spring IOC 的概念、工作原理以及如何在实际项目中应用。 首先,理解 IOC ...