spring-IOC进阶
来源:互联网 发布:数据挖掘最优算法 编辑:程序博客网 时间:2024/06/05 09:28
一、自定义数据类型转化器:
类似Struts的数据类型的转化,诸如,Java.util.Date类型的数据,如果使用spring的容器注入,进行赋值,那么就需要自定义转换器,并集成到Spring的框架中。
1、在Bean类中设置Date类型字段的set方法:
2、自定义Date格式转换器的java类:
UtilDatePropertyEditor需要继承PropertyEditorSupport:
说明:
为了让自定义转化器支持客户自定义的格式,这里使用变量的方式,交给用户在配置文件中自定义类型。另外,这个类要继承PropertyEditorSupport,需要使用this.setValue(date);将转换后的日期交给容器。
3、将定义的转换器,配置到容器中,集成到容器中:
将自定义的配置单独放到一个配置文件(applicationContext-editor.xml)中:
自定义转换器的配置和普通bean的配置类似,也使用bean标签,因为其他的类不会调用自定义的转换器,所以这里就将转换器做为一种内部bean配置到了org.springframework.beans.factory.config.CustomEditorConfigurer类的内部。
也可以为自定义的转换器提供外部访问的接口:
不过这样做的意义不大,通常我们都会使用第一种配置方法。
4、使用容器为Date类型字段赋值:
上面的准备工作都做好后,就可以像普通的数据类型一样,为日期类型数据赋值注入,下面是applicationContext-beans.xml
类似hibernate的Component映射,Spring也提供了一些代码复用的机制。如果有多个Bean有公共的属性字段,那么就可以将这些字段单独抽离出,放到一个类中,让其他类来复用这块儿代码即可。
如:Bean3和Bean4都有id、name和sex属性字段,且数据类型也都一样,那么就可以这样配置:
1、将公共属性放到一个抽象bean中,为了管理的方便,这里单独放到applicationContext-common.xml文件中:
Spring的配置文件可以有多个,也可以有一个,不管有多少个,即使在不同的配置文件中,所有的bean的id都必须是唯一的,所以,Bean4的这段代码可以放到applicationContext-common.xml文件中也可以放到applicationContext-beans.xml文件中。
如果Bean2对Bean3和Bean4都有引用,那么可以像使用其他Bean一样进行配置:
三、Ioc容器对配置文件的读取支持:
Spring支持对单个配置问价的读取,也支持对配置文件数组的读取,同时也支持若干文件的读取,但是文件命名需要有一定的规律。
有了上面的基础和配置,就可以对程序进行测试访问了:
setUp()类似Servlet的初始化,只进行一次初始化,如果希望一些变量和工厂在程序推出的时候销毁可以放到tearDown()方法中进行处理。
五、关于Scope:
Scope标签可以决定不同用户的Bean是否是同一个实例,故名思议,Scope是作用域范围的意思,它的常见的赋值有singleton和prototype。如果是prototype,我们可以理解成Bean的作用域仅限于每一个用户,而singleton则是所有用户共想用一个Bean实例。
我们可以使用下面的程序进行简单的测试:
六、自动装配:
Spring提供了两种自动装配的方式:byType和byName。
byName:在配置文件中给bean的id取名和引用它的类中的get和set方法同名,并设置即可自动加载。
byType:根据Bean类中,属性的数据类型,自动加载。
如,Bean2中有对Bean3、4、5的引用,并设置的相关的get、set方法:
如果使用byType自动装配:
在xsi:schemaLocation约束中添加:default-autowire="byType",在对Bean2的配置中就无需手动显示添加注入:
如果是byName: default-autowire="byName" 要求其他的bean的id受Bean2中的方法名的约束:
七、总结:
Spring的Ioc容器对对象的注入提供了强大的支持,程序的灵活性往往都是通过对配置文件做活的,控制反转的思想很重要,在设计程序的时候应该借鉴这种设计思路。
Ioc容器提供了多种读取配置文件的方式,另外,对对象的装载也提供了一些自动的默认机制,这种做法也是值得学习和借鉴的。
Ioc还有一些其他的内容,如 default-lazy-init标签,BeanFactory、ApplicationContext等类和接口,这里就不再一一赘述。
- spring-IOC进阶
- Spring IOC的初步进阶
- spring详细进阶之IOC
- Spring IOC容器之进阶篇
- 【SSH进阶之路】Spring的IOC逐层深入——Spring的IOC原理[通俗解释一下](三)
- 【SSH进阶之路】Spring的IOC逐层深入——Spring的IOC原理[通俗解释一下](三)
- 【SSH进阶之路】Spring的IOC逐层深入——Spring的IOC原理[通俗解释一下](三)
- 【SSH进阶之路】Spring的IOC逐层深入——Spring的IOC原理[通俗解释一下](三)
- IOC、Spring的IOC
- Spring IoC
- [Spring]IoC
- Spring IOC
- Spring IOC
- spring IOC
- Spring IOC
- Spring IOC
- Spring Ioc
- Spring IoC
- 一个java程序是怎样运行起来的(1)
- A+B Problem(Java练习)
- 题目1074:对称平方数 九度OJ
- vuejs学习系列-第一个小demo
- 海量数据的解决方案
- spring-IOC进阶
- Linux下安装tomcat搭建集群
- Matlab读取Excel数据
- MYSQL:You can’t specify target table for update in FROM clause 解决办法
- poj 2342 树形dp入门
- VMware克隆虚拟机
- 如何实现单向链表的首尾添加
- 记第一次使用git上传本地文件到github
- 【MySQL基础】视图