spring(一)
spring——Ioc
IOC也称为控制与反转(Inversion of Control,英文缩写为IoC),是spinrg两大核心基础+重点知识之一。他具有一下优点:
1.方便解耦,简化开发:通过spring提供的ioc容器,我们可以将对象之间的依赖关系交给spring进行控制,避免编码所造成的程序的过度耦合,用户不必不在为单例模式、类、属性、文件解析等这些底层的需求编码,可以专注上层的应用。
2.声明事物的支持:可以通过声明的方式灵活的进行事物管理,提高开发效率和质量。
3.方便程序测试:测试不再是昂贵的操作,可以通过非容器依赖的编程方式进行几乎所有的测试工作。
4.集成各种优秀的框架。
Ioc的理解:Ioc并非新的技术而是一种编程思想。
1.谁控制谁:在传统编程中,我们通过对象内部new出对象,是程序主动依赖对象,这样造成了程序的过度耦合,不利于维护;Ioc提供了一个容器为我们创建对象的机制。理所当然的理解为:ioc容器为我们创建对象,ioc控制对象的创建:ioc控制了外部资源的获取。
2.反转,什么被反转了?:传统编程中,开发者是通过对象内部new出对象,对象的创建是主动,这是一种正转(假如对象是老大,开发者就是小弟。小弟为老大服务(new))。Ioc控制对象创建后,是被Ioc控制,对象创建是被动(对象是不是老大,Ioc说了算,Ioc有外部资源为对象注入,对象就是老大,否则对象就不是老大)。因此,控制反转是一种编程思想。
DI(依赖与注入):组件与组件直接的关系,是容器运行时候决定的(动态的),依赖注入的目的是为了提升组件的重用的频率。
1.不需要关系组件的的具体资源来源,能更专注于业务开发。
2.系统(程序)更灵活,平台更易于扩展。
DI——的深入浅出:
1.谁依赖谁?:程序依赖Ioc容器
2.谁注入谁?:Ioc容器对程序的注入,注入什么?为程序注入对象或者注入外部资源。
结论:IOC与DI(即:控制反转与依赖注入)是一种相对性的编程思想,是紧密相连的,是同种技术不同角度的思考。
IOC代码实战:
1.IOC所需要的包:4+1(四个spring包+commons的依赖包)
2.我们需要创建一份xml文件,文件的标准命名:applicationContext.xml放在src目录下即可;
3.创建一个User实体类,成员变量分别是:name,age;提供一个无参的构造方法+有参的构造方法,别忘了还有set/get方法。
准备就绪:
①无参构造方法,实例化对象:
解释:控制台上打印了对象的地址,说明对象成功被IOC容器创建。从xml文件看,只是简单的配了一个javaBean(外部资源),id:javaBean的唯一标识,class:User这个类的全限类名。IOC是通过无参构造方法创建对象的,如果没有无参的构造方法则产生异常,无法成功创建对象;IocTest测试类:首先要获取xml的文件路径,通过获取容器中的javaBean即可以获取一个已经被创建的对象。
②有参的构造方法,实例化对象:
解释:在无参的xml中添加两个元素<constructor-age />,name属性的值必须是User这个类里面的相对匹配有参构造方法的参数名称,value属性是给参数赋值。
③set/get方式,实例化对象:
解释:更改两个元素<property>,name属性的值必须是User类的存在成员变量的名称,同理value属性是给成员变量赋值。
DI代码实战
1.准备一个实力类(Car),成员变量name,address。提供set/get方法,并且通过IOC创建Car对象并且给成员变量赋值。
①依赖注入,一步到位:
在User 类添加Car类型的成员变量,并且为该变量提供set/get方法。在xml文件中添加元素<property> name属性引用 car的javaBean.(按图顺序)
没有最终的成功,也没有致命的失败,最可贵的是继续前进的勇气。