标签:
** 什么是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
java server之spring中的IOC如何用java实现?
标签:
原文地址:http://www.cnblogs.com/hzg1981/p/5018319.html