商道电视剧国语版:SPring 创建实例原理
来源:百度文库 编辑:中财网 时间:2024/05/03 05:24:23
大家都知道Spring是一种控制翻转(IoC-Inversion of Control)和面向切面(AOP)的容器框架(这里先不讨论AOP,只提下IoC);所谓控制反转Ioc即应用本身不再负责创建和维护依赖对象(即应用所要调用的对象),而是将这些工作交给外部的Ioc容器(这里就是Spring),这样就实现了控制权的转移,即控制反转。这样做要达到的目的是实现各层间的解耦,以便于项目的开发和维护。
这样说了,可能很多人还是一头雾水,这里给大家举个例子,在做Spring与Hibernate或Ibatis这类持久层框架的结合项目时,Service层需要调用DAO层,但Service层不需要负责创建DAO的实例,而是Spring创建DAO的实例,再把DAO实例注入到Service中使用。这里的Service就是应用,而DAO就是Service所依赖的对象。这样就可以是想Service与DAO间的解耦,从而便于开发和维护。形象点可以这样理解:公司A生产笔记本电脑,但他不一定必须掌握生产显示屏的技术和工艺,他可以和公司B合作,让公司B为其提供所需的显示屏。至于显示屏如何生产,出现质量问题怎么办等等这些问题都不需要A关心,A只要在需要的时候从公司B买回显示屏装到自己的电脑上就ok了,各司其职,类似于分工的原理。
到这里是不是会产生一个疑问,Spring到底是怎么创建和维护实例的呢?解决这个问题就要提到Spring的核心配置文件(这里暂且叫做beans.xml),在beans.xml中的bean节点下配置着需要管理的类的信息,Spring用dom4j读取beans.xml中bean节点的信息(id、class等),然后根据读取到的信息,通过反射机制创建相应类(类名为class的值)的实例(实例名为id的值)。
现在实例有了,可该如何注入到应用(即需要调用实例的类)中呢?主要还是读取beans.xml中的信息,这一次读的是bean节点的子节点property的信息(name,ref等)。根据读取的信息将名为ref的值的实例通过获取应用中名为name的值的属性的setter方法,并用该方法将实例注入进去。所以在应用类中必须要有相应的属性,该属性的类型即为被注入的类,属性名必须与property节点的name的值保持一致,并且要为其提供相应的setter方法,否则Spring将导入失败,应用类调用时将抛出空指针异常(NullPointerException),所以当遇到这个异常时就要注意下上面提到的几个方面。
到目前为止只说了自定义类型的注入,如果要注入常用类型(如Integer,String,boolean等)或者集合类型(如List,Set,Map等)该怎么办呢?其实原理跟上面都是一样的,只不过有些细节需要处理下。
现在实例有了,也可以成功注入了,就可以放心调用了。
这样说了,可能很多人还是一头雾水,这里给大家举个例子,在做Spring与Hibernate或Ibatis这类持久层框架的结合项目时,Service层需要调用DAO层,但Service层不需要负责创建DAO的实例,而是Spring创建DAO的实例,再把DAO实例注入到Service中使用。这里的Service就是应用,而DAO就是Service所依赖的对象。这样就可以是想Service与DAO间的解耦,从而便于开发和维护。形象点可以这样理解:公司A生产笔记本电脑,但他不一定必须掌握生产显示屏的技术和工艺,他可以和公司B合作,让公司B为其提供所需的显示屏。至于显示屏如何生产,出现质量问题怎么办等等这些问题都不需要A关心,A只要在需要的时候从公司B买回显示屏装到自己的电脑上就ok了,各司其职,类似于分工的原理。
到这里是不是会产生一个疑问,Spring到底是怎么创建和维护实例的呢?解决这个问题就要提到Spring的核心配置文件(这里暂且叫做beans.xml),在beans.xml中的bean节点下配置着需要管理的类的信息,Spring用dom4j读取beans.xml中bean节点的信息(id、class等),然后根据读取到的信息,通过反射机制创建相应类(类名为class的值)的实例(实例名为id的值)。
现在实例有了,可该如何注入到应用(即需要调用实例的类)中呢?主要还是读取beans.xml中的信息,这一次读的是bean节点的子节点property的信息(name,ref等)。根据读取的信息将名为ref的值的实例通过获取应用中名为name的值的属性的setter方法,并用该方法将实例注入进去。所以在应用类中必须要有相应的属性,该属性的类型即为被注入的类,属性名必须与property节点的name的值保持一致,并且要为其提供相应的setter方法,否则Spring将导入失败,应用类调用时将抛出空指针异常(NullPointerException),所以当遇到这个异常时就要注意下上面提到的几个方面。
到目前为止只说了自定义类型的注入,如果要注入常用类型(如Integer,String,boolean等)或者集合类型(如List,Set,Map等)该怎么办呢?其实原理跟上面都是一样的,只不过有些细节需要处理下。
现在实例有了,也可以成功注入了,就可以放心调用了。
无法创建installdriver实例
电磁传感器原理及实例
asp中为什么要创建对象实例?
如何“创建新的SQL Server实例”?
能否给一个myeclipse+spring+hibernate的开发实例或一个小的系统,谢谢!
急!急!急!安装提示1608:无法创建InstallDriver实例
spring是什么意思
pierian spring
spring breeze
Eniaying Spring
Spring优缺点
安装提示1608:无法创建InstallDriver实例:返回码:-2147467262 这是什么意思啊?
安装提示1608:无法创建InstallDriver实例:返回码:-2147467262 这是什么意思啊?
利用server对象创建某个对象的实例的语法是怎样的?
DirectX (dx8vb.dll),在Visual Basic 中如何创建一个direct3d实例
C#中console类为什么不要创建实例便可直接使用?
安装游戏 出现1608: 无法创建installshield 实例。返回码-2147221164
请教正交矩阵的原理及手动创建的方法
我想了解电子镇流器原理知识和一些实例讲解,能否推荐一些免费资料
在哪儿可以看到有关收音机的原理与常见故障的维修实例。
请问上面可以找到电视机原理与维修的实例文章吗
构造函数用于创建类的实例对象,构造函数名应与类名相同,返回类型为void.
本人2000+SP4系统。安装NOKIA7610手机系统的时候。提示:1608:无法创建InstallDriver实例。怎么回事啊?
COM+ Event System 创建订户 {D3938AB0-5B9D-11D1-8DD2-00AA004ABD5E} 实例失败.