码迷,mamicode.com
首页 > 编程语言 > 详细

Spring的IoC原理

时间:2019-01-02 19:16:43      阅读:150      评论:0      收藏:0      [点我收藏+]

标签:属性   name   java程序   必须   运行   nbsp   特征   enc   机制   

IoC(DI):Java程序中的每个业务逻辑至少需要两个或以上的对象来协作完成。通常,每个对象在使用它的合作对象时,自己均要使用像new Object()这样的语法来完成合作对象的申请工作。你会发现:对象间的耦合度高了;

而IoC的思想是:Spring容器来实现这些相互依赖对象的创建、协调工作。对象只需要关心业务逻辑本身就可以了。从这方面来说,对象如何得到它的协作对象的责任被反转了(IoC、DI)。
IoC:Inversion of Control,控制反转;
DI:Dependency Injection,依赖注入;

IoC:是Spring的核心,贯穿始终。所谓IoC,对于Spring框架来说,就是由Spring来负责控制对象的生命周期和对象间的关系。在传统的程序开发中,一个对象如果要使用另外的对象,就必须得到它(比如自己new一个),使用完之后还要将对象销毁(比如Connection等),对象始终会和其它的接口或类耦合起来。而在IoC中,所有的类都会在Spring容器中登记,告诉Spring你是个什么东西,你需要什么东西,然后Spring会在系统运行到适当的时候,把你要的东西主动给你,同时也把你交给其它需要你的东西。所有的类的创建、销毁都由Spring来控制,也就是说,控制对象生存周期的不再是引用它的对象,而是Spring。对于某个具体的对象而言,以前是它控制其它对象,现在是所有对象都被Spring控制,所以这叫控制反转。

IoC的一个重点是在系统运行中,动态地向某个对象提供它所需要的其它对象。这一点是通过DI实现的。比如对象A需要操作数据库,以前总是需要在A中自己编写代码来获得一个Connection对象,有了Spring,我们就只需要告诉Spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,Spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖Connection才能正常工作,而这个Connection是由Spring注入到A中的,依赖注入的名字就是这么来的。

DI的实现:Java1.3之后添加了重要特征,反射(reflection),允许程序在运行的时候动态生成对象,执行对象的方法,改变对象的属性,Spring就是通过反射来实现注入的。

主要代码:
public static Object newInstance(String className) {
    Class<?> cls = null;
    Object obj = null;
    try {
        cls = Class.forName(className);
        obj = cls.newInstance();
    } catch (Exception e) {
        ......
    }
    return obj;
}


Spring中选择了IoC而不是工厂模式,本质原因是IoC通过反射机制实现,当需求出现变动时,工厂模式需要进行相应变化,而IoC的反射机制允许我们不重新编译代码,因为其对象都是动态生成的。

Spring的IoC原理

标签:属性   name   java程序   必须   运行   nbsp   特征   enc   机制   

原文地址:https://www.cnblogs.com/yuanfei1110111/p/10209711.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!