- 浏览: 543116 次
- 性别:
- 来自: 湖南娄底
文章分类
- 全部博客 (252)
- C#资料 (0)
- java资料 (22)
- 数据库资料 (0)
- Java :开发中遇到的问题 (4)
- 书写属于我的人生 (6)
- spring (6)
- hibernate (16)
- struts (17)
- SSH (5)
- Linux操作系统 (1)
- Ext (5)
- Jquery (9)
- Tomcat部署出错 (2)
- xml (5)
- JSON (5)
- javascript 专题 (5)
- 开发环境配置 (2)
- web 开发 (27)
- Eclipse (7)
- Integration (1)
- 解决方案搜罗 (7)
- 网站收藏 (8)
- 测试框架 (1)
- iframe 专题 (6)
- JSTL (2)
- 各种插件收集 (2)
- 权限设计模型探讨 (1)
- DWR (1)
- log4j (3)
- java (11)
- java 格式化 (1)
- 软件工程 (2)
- 乱码专题 (1)
- UML (4)
- java 设计模式 篇 (1)
- 用法收集 (0)
- sourceforge apache solutions (2)
- Struts2 + JPA + Spring 开发 (1)
- 自定义工具箱 (0)
- IDE (4)
- opencms (1)
- jeecms (1)
- ant (0)
- maven (2)
- 数据库连接池 (0)
- spring MVC (0)
- android (1)
- web-server (1)
- iphone-开发环境 (1)
- iphone-软件开发 (6)
- iPhone-软件设计 (1)
- iphone-应用 (3)
- iPhone-设置 (2)
- iphone-软件开发-设计模式篇 (0)
- iphone-软件开发-OC基础 (9)
- iphone-软件开发- UI篇 (9)
- iphone-软件开发-工具类篇 (1)
- iphone-软件开发-第三方篇 (0)
- iphone-软件开发-特效篇 (2)
- iphone-软件开发-动画篇 (1)
- oracle (1)
- Java-Security (0)
- Three20 UI (1)
- IOS-HOW-TO-专题 (1)
- Mark-Develope Issues (1)
- iphone-软件开发- 资料参考篇 (1)
- C 语言-基本语法 (0)
- Java Servlet (2)
- Eclipse optimization (1)
- IOS Basic (0)
- ecl (0)
- FRONT-HTML (0)
- FRONT-JS (0)
- PHP (0)
最新评论
-
qq_29862421:
[[color=brown]color=yellow][url ...
java 上传图片同时获得图片的宽和高 -
hhb19900618:
NSString <==> NSNumber 之前 ...
OC 常用数据类型之间的转换 -
baohuan_love:
果然能解决问题,感谢分享
Tomcat Error Page配置 与 Error Page在IE下不能转发的问题 -
唐丽梅6313:
很细致。。
键盘样式风格有关设置-iOS开发 -
olived:
哥哥,为什么我的没有破解成功,总是提示许可文件丢失!!QQ:3 ...
[软件测试解决方案] soapUI 4.0.1破解方法
Type1 接口注入
我们常常借助接口来将调用者与实现者分离。如:
public class ClassA {
private InterfaceB clzB;
public doSomething() {
Ojbect obj =
Class.forName(Config.BImplementation).newInstance();
clzB = (InterfaceB)obj;
clzB.doIt()
}
……
}
上面的代码中,ClassA依赖于InterfaceB的实现,如何获得InterfaceB实现类的实例?传统的方法是在
代码中创建InterfaceB实现类的实例,并将起赋予clzB。
而这样一来,ClassA在编译期即依赖于InterfaceB的实现。为了将调用者与实现者在编译期分离,于是有
了上面的代码,我们根据预先在配置文件中设定的实现类的类名(Config.BImplementation),动态
加载实现类,并通过InterfaceB强制转型后为ClassA所用。这就是接口注入的一个最原始的雏形。
而对于一个Type1型IOC容器而言,加载接口实现并创建其实例的工作由容器完成。
如下面这个类:
public class ClassA {
private InterfaceB clzB;
public Object doSomething(InterfaceB b) {
clzB = b;
return clzB.doIt();
}
……
}
在运行期,InterfaceB实例将由容器提供。
Type1型IOC发展较早(有意或无意),在实际中得到了普遍应用,即使在IOC的概念尚未确立时,这样的
方法也已经频繁出现在我们的代码中。
下面的代码大家应该非常熟悉:
public class MyServlet extends HttpServlet {
public void doGet(
HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
……
}
}
这也是一个Type1 型注入,HttpServletRequest和HttpServletResponse实例由Servlet Container
在运行期动态注入。
另,Apache Avalon是一个较为典型的Type1型IOC容器。
Type2 设值注入
在各种类型的依赖注入模式中,设值注入模式在实际开发中得到了最广泛的应用(其中很大一部分得
力于Spring框架的影响)。
在笔者看来,基于设置模式的依赖注入机制更加直观、也更加自然。Quick Start中的示例,就是典
型的设置注入,即通过类的setter方法完成依赖关系的设置。
Type3 构造子注入
构造子注入,即通过构造函数完成依赖关系的设定,如:
public class DIByConstructor {
private final DataSource dataSource;
private final String message;
public DIByConstructor(DataSource ds, String msg) {
this.dataSource = ds;
this.message = msg;
}
……
}
可以看到,在Type3类型的依赖注入机制中,依赖关系是通过类构造函数建立,容器通过调用类的构
造方法,将其所需的依赖关系注入其中。
PicoContainer(另一种实现了依赖注入模式的轻量级容器)首先实现了Type3类型的依赖注入模式。
几种依赖注入模式的对比总结
接口注入模式因为历史较为悠久,在很多容器中都已经得到应用。但由于其在灵活性、易用性上不如
其他两种注入模式,因而在IOC的专题世界内并不被看好。
Type2和Type3型的依赖注入实现则是目前主流的IOC实现模式。这两种实现方式各有特点,也各具
优势(一句经典废话J)。
Type2 设值注入的优势
1. 对于习惯了传统JavaBean开发的程序员而言,通过setter方法设定依赖关系显得更加直
观,更加自然。
2. 如果依赖关系(或继承关系)较为复杂,那么Type3模式的构造函数也会相当庞大(我们需
要在构造函数中设定所有依赖关系),此时Type2模式往往更为简洁。
3. 对于某些第三方类库而言,可能要求我们的组件必须提供一个默认的构造函数(如Struts
中的Action),此时Type3类型的依赖注入机制就体现出其局限性,难以完成我们期望的功
能。
Type3 构造子注入的优势:
1. “在构造期即创建一个完整、合法的对象”,对于这条Java设计原则,Type3无疑是最好的
响应者。
2. 避免了繁琐的setter方法的编写,所有依赖关系均在构造函数中设定,依赖关系集中呈现,
更加易读。
3. 由于没有setter方法,依赖关系在构造时由容器一次性设定,因此组件在被创建之后即处于
相对“不变”的稳定状态,无需担心上层代码在调用过程中执行setter方法对组件依赖关系
产生破坏,特别是对于Singleton模式的组件而言,这可能对整个系统产生重大的影响。
4. 同样,由于关联关系仅在构造函数中表达,只有组件创建者需要关心组件内部的依赖关系。
对调用者而言,组件中的依赖关系处于黑盒之中。对上层屏蔽不必要的信息,也为系统的
层次清晰性提供了保证。
5. 通过构造子注入,意味着我们可以在构造函数中决定依赖关系的注入顺序,对于一个大量
依赖外部服务的组件而言,依赖关系的获得顺序可能非常重要,比如某个依赖关系注入的
先决条件是组件的DataSource及相关资源已经被设定。
可见,Type3和Type2模式各有千秋,而Spring、PicoContainer都对Type3和Type2类型的依赖注
入机制提供了良好支持。这也就为我们提供了更多的选择余地。理论上,以Type3类型为主,辅之以Type2
类型机制作为补充,可以达到最好的依赖注入效果,不过对于基于Spring Framework开发的应用而言,
Type2使用更加广泛。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=498586
发表评论
-
java 上传图片同时获得图片的宽和高
2012-02-01 19:00 4525java 上传图片同 ... -
Java实现的拦截器
2012-01-10 09:56 1304Java实现的拦截器 拦截 ... -
Tomcat 6中配置SSL双向认证
2012-01-09 20:58 0参考资料:http://wangking717.ite ... -
使用exe4j打包jar生成exe常用设置
2012-01-07 22:49 1085使用exe4j打包jar生成exe常用设置 ... -
字符串工具箱
2011-12-25 21:01 1018import java.io.File; import ja ... -
Java创建、重命名、删除文件和文件夹
2011-12-25 21:00 7074Java的文件操作太基础, ... -
JAVA 正则表达式
2011-12-03 22:37 795在Sun的Java JDK 1.40版本中 ... -
java 格式化字符串输出
2011-11-12 10:46 1295输出指定格式的字符串: Java代 ... -
java中实现换行的几种方法
2011-11-12 10:22 48241.使用java中的转义符"\r\n&quo ... -
java 访问修饰符
2011-11-06 12:04 833private package-private 只可以在同一 ... -
java集合框架
2011-10-12 08:10 865待续。。。 -
java中的io系统总结(转)
2011-10-09 09:02 948java中的io中的(input/outp ... -
属性文件的读写
2011-09-17 23:06 926附件中包含:属性文件的读写操作! -
javassist:增强型的java反射工具,获取方法参数名,获取方法参数标注值
2011-09-03 14:24 5056java的反射是不能获取方法的参数名的。比如: publi ... -
quartz cronExpression详解<转载>
2011-08-18 20:14 1024quartz cronExpression详解 2009 ... -
java获取真实客户端ip地址 <转载>
2011-08-12 11:35 1917在JSP里,获取客户端的IP地址的方法是:request.ge ... -
java class.getResource()方法获取文件资源
2011-08-06 22:34 1570《转载》 用JAVA获取文件,听似简单,但对于很多像我这样的 ... -
求数组中最小的不重复的整数
2011-03-19 11:23 1003public class minNoRepeatNum{ ... -
WEB计时器的实现——Timer(转载)
2010-10-21 07:55 1718Java定时器(java.util.Timer)有定时触发计划 ... -
spring 中Pointcut的定义(转)
2010-10-18 09:47 1574在Spring 2.0中,Pointcut的定义包括两个部分 ...
相关推荐
在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它使得对象之间的耦合度降低,提高了代码的可测试性和可维护性。本文将深入探讨Spring中的依赖注入实现方式,以及如何通过样例文件...
最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的时候把这两种实现都给注入进了依赖注入容器中,但是在...今天我们就来一起探讨下实现这种需求的几种实现方式吧。
依赖注入可以根据依赖传递的方式分为以下几种类型: - **Setter注入**:通过setter方法来注入依赖。 - **构造函数注入**:通过构造函数参数来注入依赖。 - **依赖获取**:对象主动请求依赖项。 ##### 3.1.1 Setter...
在深入探讨Spring框架中基于注解(Annotation)的依赖注入(Dependency Injection,简称DI)实现之前,我们首先需要理解几个核心概念:Spring框架、依赖注入、以及注解本身。 ### Spring框架简介 Spring框架是一个...
在C++中实现依赖注入,主要有几种方法: 1. 组装元(Composition Root):在应用程序的入口点(如main函数)或某个统一的位置,负责组装并初始化对象,将依赖关系注入到需要的对象中。 2. 构造函数注入:通过对象的...
"IoC 依赖注入 技术总结" IoC 依赖注入技术是软件设计中...IoC 框架的设计是实现 IoC 依赖注入技术的重要组件,需要完成以下几个基本的功能。IoC 框架的设计可以分为动态 IoC 和静态 IoC 两种,每种设计都有其优缺点。
Spring 依赖注入的几种方式 依赖注入(Dependency Injection,简称 DI)是一种设计模式,它可以将对象之间的耦合关系降到最低,从而提高系统的灵活性和可维护性。在 Spring 框架中,依赖注入是通过 IoC 容器来实现...
下面介绍几种常用的依赖注入相关的注解: - **@Component**:用于标记一个普通的Java类为Spring管理的Bean。 - **@Service**:通常用于标记业务层的组件。 - **@Repository**:用于标记数据访问层(DAO层)的组件。...
在Angular中,依赖注入主要体现在以下几个方面: 1. **服务(Services)**:服务是最常见的依赖注入使用场景,它们提供了一种在组件之间共享数据和功能的方式。通过`@Injectable()`装饰器创建服务,并使用`@...
例如,在一个类中需要传递数据的方式有几种?普通方法(set 方法)、构造方法、引用类型、简单类型(基本数据类型与 String)等。Spring 框架基于这些知识点,为我们提供了两种注入方式:setter 注入和构造器注入。 ...
依赖注入可以通过以下几种方式实现: 1. **构造函数注入**:通过类的构造函数参数传递依赖项。这是最常用的一种方式,因为可以清晰地表明类所需的依赖,并且可以确保依赖项在类初始化时已经准备好。 ```csharp ...
Unity实现依赖注入的基础包括以下几个关键概念: 1. **依赖**: 在软件中,一个类通常依赖于其他类来完成某些功能。这些被依赖的类被称为依赖。 2. **接口**: 接口定义了一组方法,实现了该接口的类必须提供这些...
在Spring中,依赖注入主要通过以下几种方式实现: 1. **构造器注入**:通过在类的构造函数中传递依赖对象的实例,Spring容器会在创建目标对象时调用合适的构造函数并注入依赖。 2. **setter注入**:在类中定义...
XML解析则是实现依赖注入的一种常见方式,尤其是在Spring框架中广泛使用。本篇文章将深入探讨如何利用XML解析来完成依赖注入,并结合源码`xmlparse_Ioc`进行详细解释。 首先,我们要理解什么是依赖注入。依赖注入的...
在Spring配置文件中,我们可以指定使用哪个实现类,并通过依赖注入将其注入到需要使用该服务的类中。这样,当我们需要更换服务实现时,只需更改配置,而无需修改调用者的代码。 在本项目"Spring_依赖注入_面向接口...
总结一下,Spring依赖注入的原理主要包括以下几点: 1. 通过构造器或setter方法实现组件间的依赖关系。 2. 使用`@Autowired`注解自动匹配和注入依赖。 3. Bean工厂和ApplicationContext管理bean生命周期,Bean...
@Resource 可以用在方法、属性、类上,通过 CommonAnnotationBeanPostProcessor 类实现依赖注入,与 @Autowired 一致。但可以指定 name 属性来指定 beanName,但如果 name 对应的 bean 不存在,则会抛出异常。 3. @...
在Spring中,依赖注入可以通过XML配置文件实现,本文将重点介绍两种常见的注入方式:Set注入和构造器注入。 1. Set注入 Set注入是最常见的注入方式,适用于对象没有默认构造函数或构造函数不接受参数的情况。首先,...