简单的helloworld理解IOC和DI
传统的方法:
1. 导入所需要的jar包
2.编写一个接口并且实现这个接口
编写一个接口如下:
实现这个接口:
3.编写一个测试类
结果:
我们可以发现传统的方式:对象和对象之间的依赖关系非常的严重,耦合度非常高,而且依赖的关系都写死在项目里,不利于整个项目工程的维护和修改,必须改代码.
spring方式的实现:
1.相同的部分我在这就不写了,下面的bean的配置:
id:区别bean的唯一性
class:实现接口的包全名
name:bean类中的属性名称
value:对该属性进行赋值
2.编写测试方法
3.运行结果:
总结:
相当于
相当于
理解IOC控制反转和DI依赖注入
IOC:Inverse of Control。就是将原本在程序中手中创建的HelloWorld对象的控制权,交由spring框架管理。简单说:就是创建helloWorld对象的控制权被反转到了Spring框架。
DI : DependencyInjection。依赖注入,在spring框架负责创建bean对象时,动态的将依赖对象注入到 Bean组件中。
两者之间的区别:
IOC控制反转,指将对象的创建权,反转到spring容器。
DI依赖注入,指spring创建对象的过程中,将对象依赖属性通过配置进行注入。
DI:IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(DependencyInjection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢?Java1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。
IOC的优点:
1.把对象创建和依赖关系定义到xml文件中,我们可以随时改变子类;
2.控制反转减轻了对象之间的耦合度,减轻了对象之间的依赖关系,增加了系统的灵活性,可维护性以及可移植性等等
3.提高了应用的运行效率一般IOC容器在启动时更具依赖关系将所有普通对象全部创建出来并放在容器中,是常驻内从的除非配置为启动时不创建对象..
IOC的缺点:
1.生成对象方式变得复杂了(实际上操作变简单了)这种方式可能有些不直观
2.对内从要求比较高,而且启动时比较慢,但是一旦启动完毕,几乎所有用到的对象都创建完毕,使用时直接从容器中拿,效率非常高.
IOC和DI底层都是通过反射实现的
传统的方法:
1. 导入所需要的jar包
2.编写一个接口并且实现这个接口
编写一个接口如下:
实现这个接口:
3.编写一个测试类
结果:
我们可以发现传统的方式:对象和对象之间的依赖关系非常的严重,耦合度非常高,而且依赖的关系都写死在项目里,不利于整个项目工程的维护和修改,必须改代码.
spring方式的实现:
1.相同的部分我在这就不写了,下面的bean的配置:
id:区别bean的唯一性
class:实现接口的包全名
name:bean类中的属性名称
value:对该属性进行赋值
2.编写测试方法
3.运行结果:
总结:
相当于
相当于
理解IOC控制反转和DI依赖注入
IOC:Inverse of Control。就是将原本在程序中手中创建的HelloWorld对象的控制权,交由spring框架管理。简单说:就是创建helloWorld对象的控制权被反转到了Spring框架。
DI : DependencyInjection。依赖注入,在spring框架负责创建bean对象时,动态的将依赖对象注入到 Bean组件中。
两者之间的区别:
IOC控制反转,指将对象的创建权,反转到spring容器。
DI依赖注入,指spring创建对象的过程中,将对象依赖属性通过配置进行注入。
DI:IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(DependencyInjection,依赖注入)来实现的。比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。在系统运行时,spring会在适当的时候制造一个Connection,然后像打针一样,注射到A当中,这样就完成了对各个对象之间关系的控制。A需要依赖Connection才能正常运行,而这个Connection是由spring注入到A中的,依赖注入的名字就这么来的。那么DI是如何实现的呢?Java1.3之后一个重要特征是反射(reflection),它允许程序在运行的时候动态的生成对象、执行对象的方法、改变对象的属性,spring就是通过反射来实现注入的。
IOC的优点:
1.把对象创建和依赖关系定义到xml文件中,我们可以随时改变子类;
2.控制反转减轻了对象之间的耦合度,减轻了对象之间的依赖关系,增加了系统的灵活性,可维护性以及可移植性等等
3.提高了应用的运行效率一般IOC容器在启动时更具依赖关系将所有普通对象全部创建出来并放在容器中,是常驻内从的除非配置为启动时不创建对象..
IOC的缺点:
1.生成对象方式变得复杂了(实际上操作变简单了)这种方式可能有些不直观
2.对内从要求比较高,而且启动时比较慢,但是一旦启动完毕,几乎所有用到的对象都创建完毕,使用时直接从容器中拿,效率非常高.
IOC和DI底层都是通过反射实现的