java spring server_java server之spring中的IOC如何用java实现?

标签:

** 什么是IOC?

一般的对象耦合是在编译时确定的,也就是说当我们写如下类:

public class StaticCoupling {

String s = new String("hzg1981");

}

的时候,类StaticCoupling在编译期间就跟String类耦合在了一起。 在代码静态分析时,就可以确认它们之间的耦合。

而IOC 则是在运行期间才使用assembler object绑定需要耦合的对象。绑定过程是由依赖注入(DI)实现的。需要注意的是IOC和DI是有区别的。IOC是一种设计范式(design paradigm),IOC是依赖于DI的,DI用来实现IOC。 Dependency injection is a pattern used to create instances of objects that other objects rely on without knowing at compile time which class will be used to provide that functionality.

也就是说,DI是一种可以实现IOC的设计模式。DI不是唯一可以实现IOC的设计模式,有以下三种三种设计模式可以实现IOC设计范式:

1 工厂模式: factory pattern

2 服务定位器模式:service locator pattern

3  依赖注入模式。依赖注入又可以分为三种类型: 构造函数注入(constructor injection)  Setter注入(setter injection)   以及借口注入(interface injection)

** ioc的简单实现

什么是DI机制? (DI = IOC, Dependence Injection, Inverse of control)

依赖注入(Dependecy Injection)和控制反转(Inversion of Control)是同一个概念,具体的讲:当某个角色

需要另外一个角色协助的时候,在传统的程序设计过程中,通常由调用者来创建被调用者的实例。但在spring中

创建被调用者的工作不再由调用者来完成,因此称为控制反转。创建被调用者的工作由spring来完成,然后注入调用者

因此也称为依赖注入。

为什么说IOC很简单呢?说白了其实就是由我们平常的new转成了使用反射来获取类的实例,相信任何人只要会用java的反射机制,那么自己写一个IOC框架也不是不可能的。

……

public ObjectgetInstance(String className) throws Exception

{

Object obj = Class.forName(className).newInstance();

Method[] methods = obj.getClass().getMethods();

for (Method method : methods) {

if (method.getName().intern() == "setString") {

method.invoke(obj, "hello world!");

}

}

}

……

上面的一个方法我们就很简单的使用了反射为指定的类的setString方法来设置一个hello

world!字符串。其实可以看到IOC真的很简单,当然了IOC简单并不表示spring的IOC就简单,spring的IOC的功能强大就在于有一系

列非常强大的配置文件维护类,它们可以维护spring配置文件中的各个类的关系,这才是spring的IOC真正强大的地方。在spring的Bean

定义文件中,不仅可以为定义Bean设置属性,还支持Bean之间的继承、Bean的抽象和不同的获取方式等等功能。

** Spring中的IOC

ICO容器(Container): The org.springframework.beans.factory.BeanFactory interface is the central IoC container interface in Spring.

参考文献:

http://howtodoinjava.com/2013/03/19/inversion-of-control-ioc-and-dependency-injection-di-patterns-in-spring-framework-and-related-interview-questions/

http://www.informit.com/articles/article.aspx?p=174533

http://javabeginnerstutorial.com/spring-framework-tutorial/spring-aopaspect-oriented-programming/

http://www.cnblogs.com/qqlin/archive/2012/10/09/2707075.html

标签:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值