Spring中到底什么是控制反转
2016-05-11 20:02
537 查看
从接触spring框架开始,控制反转这个名词也不算陌生了,一直模模糊糊没用弄清楚它真正的含义,知道今天算是比较清楚地明白了。
讲spring中的控制反转,我们先要从一个例子说起:
比如一个类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类了,这也减少了系统资源的消耗。
以上就是我所理解的spring的控制反转(依赖注入)带来的好处。
讲spring中的控制反转,我们先要从一个例子说起:
比如一个类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类了,这也减少了系统资源的消耗。
以上就是我所理解的spring的控制反转(依赖注入)带来的好处。
相关文章推荐
- Java并发编程:阻塞队列
- 浅谈Struts2
- Myeclipse开发web程序
- ubuntu下配置java环境
- SpringMVC java 配置 DispatcherServlet
- 【java】KDTree,实现个java版本,留着日后可能用得上
- java RTTI和反射
- 自学Java步骤
- Java并发编程:线程池的使用
- JVM调优Demo(一)避免新生代过小(增大新生代大小)
- Intellij Idea技巧-1
- eclipse或者myeclipse安装ext插件
- Intellij IDEA搭建maven+注解SpringMVC框架
- 深入理解Java中的Map
- java中创建类与对象
- Java 7之基础 - 强引用、弱引用、软引用、虚引用(总结的很好)
- eclipse开发工具报错gc overhead limit exceeded的解决方案
- ElasticSearch之Java Api聚合分组实战
- java执行过程(自己的理解,希望大神指点)
- 创建编译运行MapReduce程序(Eclipse+Ubuntu14.04+Hadoop2.7.2)