- 浏览: 2013308 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (795)
- java (263)
- 聚类搜索引擎 (9)
- 经验之谈 (67)
- DSP (3)
- C++ (140)
- Linux (37)
- SNMP (6)
- Python (6)
- 数据库 (61)
- 网络 (20)
- 算法 (15)
- 设计模式 (4)
- 笔试题 (38)
- 散文 (35)
- 数据结构 (9)
- 银行知识 (0)
- 榜样 (9)
- Lucene (15)
- Heritrix (6)
- MetaSeeker (0)
- netbeans (12)
- php (3)
- 英语 (8)
- DB2 (0)
- java基础 (5)
- mongodb & hadoop (4)
- Javascript (7)
- Spring (4)
- ibatis & myibatis (1)
- velocity (1)
- 微服务 (0)
- paddle (1)
- 第三方 (0)
- 知识沉淀 (1)
- 建模 (0)
最新评论
-
0372:
标示对java很陌生!
中文乱码解决的4种方式 -
梦留心痕:
Java中\是转意字符, 可是你的这句话我没看懂,只要把得到的 ...
java中如何忽略字符串中的转义字符--转载 -
yanjianpengit:
[b][/b]
java为什么非静态内部类里面不能有静态成员 -
springdata-jpa:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
eclipse 如何把java项目转成web项目 -
qq1130127172:
,非常好。
(转)SpringMVC 基于注解的Controller @RequestMapping @RequestParam..
1.IOC及注入模式简介
为什么要用IOC,参见《为什么要用IOC》
IOC并不能清晰地解释类与类之间依赖的解耦关系,软件界的泰斗级人物Martin Fowler提出了DI(依赖注入:Dependency Injection)的概念,即将客户类对接口实现类的依赖关系由第三方(容器或协作类)注入,以移除客户类对具体接口实现类的依赖。
我们使用抽象接口来隔离使用者和具体实现之间的依赖关系,但是不管再怎么抽象,最终还是要创建具体实现类的实例,这种创建具体实现类的实例对象就会造成对于具体实现的依赖,为了消除这种创建依赖性,需要把依赖移出到程序的外部(比如配置文件)。
使用依赖注入后,这些类完全是基于抽象接口编写而成的,所以可以最大限度地适应需求的变化。依赖注入的形式有三种,分别为构造子注入(Constructor Injection)、设值方法注入(Setter Injection)和接口注入(Interface Injection)。
2.举例说明
现有一个服务接口,只有一个行为,
Interface IService{
go();
}
Service类是接口IService的实现者
public Service implements IService{
public void go() {
...
}
}
Consumer类想调用这个服务,最原始的方法:
public Consumer{
private IService service = null;
public Consumer(){
service=new Service ();
}
public void doSomething() {
service.go();
}
}
3.构造子注入
通过构造函数,将接口的具体实现类注入进来。代码如下
public Consumer{
private IService service = null;
public Consumer(IService service){
this.service=service
}
public void doSomething() {
service.go();
}
}
调用过程如下
Service service=new Service();
Consumer consumer=new Consumer(service);
consumer.doSomething();
4.Setter方法注入
public Consumer{
private IService service = null;
public SetService(IService service){
this.service=service
}
public void doSomething() {
service.go();
}
}
调用过程如下
Service service=new Service();
Consumer consumer=new Consumer();
consumer.SetService(service);
consumer.doSomething();
5.接口注入
接口注入是指将客户类所有注入的方法抽取到一个接口中,客户类通过实现这一接口提供注入的方法。为了采取接口注入的方式,需要声明一个额外的接口:
public interface Injectable{
void injectService(IService service);
}
Consumer类通过继承Injectable接口注入
public Consumer implements Injectable{
private IService service = null;
public injectService(IService service){
this.service=service;
}
public void doSomething() {
service.go();
}
}
调用过程如下:
Service service=new Service();
Consumer consumer=new Consumer();
consumer.injectService(service);
consumer.doSomething();
由于通过接口注入需要额外声明一个接口,增加了类的数目,而且它的效果和属性注入并无本质区别,因此我们不提倡这种方式。
6.类与类之间依赖的管理
类与类之间的依赖关系实现了解耦,但是类的实例化和类与类之间的注入依然是存在的,只是这个工作被延后并且由另外的类来完成,我们把管理这些类的实例化和对类与类之间关系进行管理的模块称之为第三方容器。
这种容器帮助我们完成类的初始化和装配工作,让我们从这些底层的实现类实例化,依赖关系的装配中脱离出来,专注于更有意思的业务代码的编写工作,那确实是挺惬意的事情。Spring就是这样一个容器,它通过配置文件描述类之间的依赖关系,下面是Spring配置文件的对以上实例进行配置的样式代码:
<beans>
<bean id="myservice" class="com.Service"></bean>
<bean id="consumer" class="com.Consumer">
<property name="service"><ref bean="myservice"/></property>
</bean>
</beans>
通过new XmlBeanFactory(“beans.xml”)等方式即可启动容器,在容器启动时,Spring根据配置文件的描述信息,通过Java的反射机制自动实例化Bean并完成依赖关系的建立,从容器中即可返回准备就绪的Bean实例,以待后续的使用。
发表评论
-
流式计算
2022-02-07 14:31 226private void postHandle(List& ... -
消息队列使用的四种场景介绍
2018-08-09 16:34 2397以下介绍消息队列在实际应用中常用的使用场 ... -
设计模式
2018-04-11 16:49 9281.桥梁模式,将抽象部分与实现部分隔离开,抽象部分持有实现 ... -
Spring boot web可以访问Service和Mapper层
2018-03-26 16:42 2789Spring boot的web层可以访问Service层,然 ... -
FreeMarker的基础语法使用 && 心得和技巧
2018-01-10 10:03 1917FreeMarker是一个模板引 ... -
webService----wss4j+cxf实现WS-Security(基于UsernameToken)
2017-10-23 18:58 1497分享一下wss4j+cxf基于UsernameToken的安 ... -
Spring MVC之LocaleResolver(解析用户区域)
2017-09-23 15:55 2434为了让web应用程序支持国际化,必须识别每个用户的首选区域, ... -
(转)java泛型
2016-11-12 20:29 1586http://www.cnblogs.com/lwbqqyu ... -
java中如何忽略字符串中的转义字符--转载
2016-06-28 16:42 9790原文地址:http://my ... -
(转)关于JAP FetchType.LAZY(hibernate实现)的理解 .
2016-04-27 15:22 5032JPA定义实体之间的关系有如下几种: @OneToOne ... -
(转)hibernate annotation注解方式来处理映射关系
2016-04-26 16:52 1785http://www.cnblogs.com/xiao ... -
代码片段,导出的文件头
2015-11-18 20:34 1552public static void setDownload ... -
(转)为什么要两次调用encodeURI来解决乱码问题
2015-08-03 20:19 2419地址:http://blog.csdn.net/howla ... -
杀死进程
2015-07-21 14:54 1228sudo lsof -i :9000 COMMAND P ... -
批处理batch,执行多个SQL语句
2015-07-15 19:21 10533批处理batch,执行多个SQL语句。 ... -
中文乱码解决的4种方式
2015-07-03 14:20 2572目前收集到4中方法,中文传参一documentPath为例: ... -
GET请求的中文乱码问题及处理意义
2015-07-03 13:47 6588首先看一段乱码的程序 ... -
java.ByteArrayInputStream与ByteArrayOutputStream再次理解
2015-03-16 17:59 3188第一次看到ByteArrayOutputStream的时 ... -
(转)SpringMVC 基于注解的Controller @RequestMapping @RequestParam..
2014-07-28 17:42 2207概述 继 Spring 2.0 对 Spring MVC ... -
java中序列化的serialVersionUID解释
2014-07-25 09:26 1836serialVersionUID: 字面意思上是序列化的版本号 ...
相关推荐
最近有个需求就是一个抽象仓储层接口方法需要SqlServer以及Oracle两种实现方式,为了灵活我在依赖注入的时候把这两种实现都给注入进了依赖注入容器中,但是在服务调用的时候总是获取到最后注入的那个方法的实现,这...
字——“依赖注入”(Dependency Injection),并将其与“服务定位器”(Service Locator) 模式作一个比较。不过,这两者之间的差异并不太重要,更重要的是:应该将组件的配置与使用 分离开——两个模式的目标都是...
本文中,作者深入探索IOC模式的工作原理,给它一个更能描述其特点的名字——“依赖注入”(Dependency Injection),并将其与“服务定位器”(Service Locator)模式作一个比较。不过,这两者之间的差异并不太重要,...
主要介绍了.NET IoC模式依赖反转(DIP)、控制反转(Ioc)、依赖注入(DI),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
在本文中,我将深入探索这个模式的工作原理,给它一个更能描述其特点的名字——“依赖注入”(Dependency Injection),并将其与“服务定位器”(Service Locator)模式作一个比较。不过,这两者之间的差异并不太...
依赖注入,全称是“依赖注入到容器”, 容器(IOC容器)是一个设计模式,它也是个对象,你把某个类(不管有多少依赖关系)放入这个容器中,可以“解析”出这个类的实例。所以依赖注入就是把有依赖关系的类放入容器...
依赖注入:获得依赖对象的过程由自身管理变为了由IOC容器主动注入,就是由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。 AOP最多听到的就是面向切面编程,那对于这个名词,我第一次听到的时候也是不能...
auryn是一个递归依赖注入器。 使用auryn引导并连接SOLID,面向对象PHP应用程序。 怎么运行的 除其他外,auryn基于在类构造函数签名中指定的参数类型提示来递归实例化类依赖关系。 这需要使用反射。 您可能听说过...
控制反转(Inversion of Control,英文缩写为IoC)是一个重要的面向对象编程的法则来削减计算机程序的耦合问题。 控制反转还有一个名字叫做依赖注入(Dependency Injection)。简称DI。
依赖注入的模式,依赖注入模式一般分为两类:手动注入和自动注入。 手动模式即配置或者编程的方式,提前安排注入规则,包括xml资源配置元信息、java注解配置元信息和api配置信息,xml资源配置元信息,是比较常见...
首先依赖注入和控制反转说的是同一个东西,是一种设计模式,这种设计模式用来减少程序间的耦合,鄙人学习了一下,看TP官网还没有相关的文章,就写下这篇拙作介绍一下这种设计模式,希望能为TP社区贡献一些力量。...
依赖注入(Dependency Injection) = 控制反转(Inversion ofControl,IoC):当某个Java实例(调用者)需另一个Java实例(被调用者)时,在依赖注入模式下,创建被调用者的工作不再由调用者来完成,因此称为 控制反转 ;...
Core封装包是框架的最基础部分,提供IOC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。 2.Spring...
拜读过Martin Fowler大师的关于IOC容器和DI模式的大作,深感受益匪浅,恰逢正在开发的项目使用了这种技术,因此也想班门弄斧,谈一下自己对IOC容器以及依赖注入的一点理解。 仅凭自己对Martin Fowler大师的大作一点...
实现IOC的主要设计模式是工厂模式。 AOP(面向切面)是一种编程范式,提供从另一个角度来考虑程序结构以完善面向对象编程 (OOP)。 AOP为开发者提供了一种描述横切关注点的机制,并能够自动将横切关注点织入到面向...
依赖注入是IoC的主要实现方式 IoC的实现机制: 工厂模式 + 反射机制:工厂模式提供创建方法,通过反射获取需要加载的类的全限定名称,通过工厂加载产生需要的类对象。 ② AoP(Aspect Oriented Programing) --> 面向...
语言切换:,关于依赖注入依赖注入是一种软件设计模式,其中有人将依赖关系传递给对象。 是更广泛技术的一种形式,有助于有关更多详细信息,您可以阅读此链接另外,我建议您阅读词汇表,这将有助于更好地理解术语。...
我想要像 AngularJS 模块模式这样的东西,它带有服务、提供者和自动依赖注入。 我还想确保可以将各种应用程序组件加载到单元测试中,而不必经历 DI 系统的开销。 该模块尝试在服务器端 nodejs 项目中使用 angularJS...
依赖注入通常也是我们所说的ioc模式,今天分享的是用typescript语言实现的ioc模式,这边用到的主要组件是 reflect-metadata 这个组件可以获取或者设置元数据信息,它的作用是拿到原数据后进行对象创建类似C#中的反射...