Spring中到底什么是控制反转
2017-11-18 · 知道合伙人数码行家
huanglenzhi
知道合伙人数码行家
向TA提问 私信TA
知道合伙人数码行家
采纳数:117538
获赞数:517184
长期从事计算机组装,维护,网络组建及管理。对计算机硬件、操作系统安装、典型网络设备具有详细认知。
向TA提问 私信TA
关注
展开全部
先要从一个例子说起:
比如一个类A中,需要用到另一个类B的方法,那么我们就要在A中实例化B,然后调用B的方法。代码如下:
Class A
{
private Class b = new ClassB();
b.active();
}
假设,我们还有C类,D类等。他们也都要用到B的方法,同样地他们也需要实例化B,然后调用B的方法。如果B的实例化是一个十分消耗系统资源的过程,比如数据库连接等。那么这样每次一个类中需要调用B的方法,就要实例化B一次,这将是一个非常消耗系统资源的过程。
在Spring框架中是怎么做的呢?
Spring框架控制反转我是这样理解的,我们每次使用spring框架不是要配置xml文件,这个xml配置bean的id和class。spring中默认的bean为单实例模式,而且通过bean的class,通过反射机制可以创建这个实例,因此,spring框架通过反射替我们创建好了实例并且替我们维护他们。A需要引用B类,在xml我们通过构造器或者是属性把B注入到A中,
其实就是spring框架,把B实例的引用传给了A的成员变量。
读了上面你就会明白,之前需要在A类来负责创建B的实例,现在创建的工作交给了Spring框架,然后spring框架类注入实例的引用。创建对象的责任的转移,即我们理解的控制反转。同时,spring替我们维护B这个单实例,我们一个新的类需要引用时,就不需要重复地实例化B类了,这也减少了系统资源的消耗。
比如一个类A中,需要用到另一个类B的方法,那么我们就要在A中实例化B,然后调用B的方法。代码如下:
Class A
{
private Class b = new ClassB();
b.active();
}
假设,我们还有C类,D类等。他们也都要用到B的方法,同样地他们也需要实例化B,然后调用B的方法。如果B的实例化是一个十分消耗系统资源的过程,比如数据库连接等。那么这样每次一个类中需要调用B的方法,就要实例化B一次,这将是一个非常消耗系统资源的过程。
在Spring框架中是怎么做的呢?
Spring框架控制反转我是这样理解的,我们每次使用spring框架不是要配置xml文件,这个xml配置bean的id和class。spring中默认的bean为单实例模式,而且通过bean的class,通过反射机制可以创建这个实例,因此,spring框架通过反射替我们创建好了实例并且替我们维护他们。A需要引用B类,在xml我们通过构造器或者是属性把B注入到A中,
其实就是spring框架,把B实例的引用传给了A的成员变量。
读了上面你就会明白,之前需要在A类来负责创建B的实例,现在创建的工作交给了Spring框架,然后spring框架类注入实例的引用。创建对象的责任的转移,即我们理解的控制反转。同时,spring替我们维护B这个单实例,我们一个新的类需要引用时,就不需要重复地实例化B类了,这也减少了系统资源的消耗。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询