前言
在java中,我想大家都用过内部类,今天要介绍的是spring中注入的内部Beans,与内部类类似,顾名思义,它就是被定义在某个Bean中的内部Bean。听起来有点奇怪,还是看个简单的配置实例就清楚了:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <bean id="outerBean" class="..."> <property name="target"> <bean id="innerBean" class="..."/> </property> </bean> </beans>
如上所示,如果在一个bean的
用内部Bean改写上一篇的例子
由于大部分代码与上一篇一样,为了节省篇幅,这里只给出改动的部分,也就是xml配置文件:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"> <!-- <bean id="tv" class="sirk_spring_tuto.demo.TV"> <constructor-arg ref="screen"></constructor-arg> </bean> --> <bean id="tv" class="sirk_spring_tuto.demo.TV"> <!-- <property name="screen" ref="screen"></property> --> <property name="screen"> <bean id="screen" class="sirk_spring_tuto.demo.CRTScreen"></bean> </property> </bean> <!-- <bean id="screen" class="sirk_spring_tuto.demo.CRTScreen"></bean> --> </beans>
其中注释部分为上篇内容。是不是很简单?运行结果应该和上一篇一样哦。如果出错或者不一样,那说明程序哪里不对了,请仔细检查下。既然一样,为什么spring还要提供这种方式,而不是和上篇一样ref其它的bean呢?好问题,其实非要讨论它们的区别的话,可以理解为它们的作用域不太一样。这里的内部bean很明显只能被它外部包含它的bean可用,如上面例子,也就是id为tv的bean使用它。但是如果和上篇一样,把id为screen的bean放到外面,那么不仅仅id为tv的bean可以引用它,其它定义的bean也可以通过ref这种方式引用它。所以,在大多数情况下还是使用ref的方式的,除非你很确定某个bean只会被一个bean所用,不然就不建议使用inner bean了。另外,在inner bean中可以不定义id或者name,因为他很不需要被外部某些bean所引用,自然id或者name没什么作用了。
小结
本文简单介绍了spring中的inner bean注入。是否觉得非常愉快呢,原来很简单啊,因为这是新手攻略嘛,总不好让新手看很复杂的东西吧,如果你觉得不过瘾,别担心,完成新手攻略后,博主打算搞一个升级版本的攻略(又要挖坑了-. -),敬请期待哦!
##文档信息
- 版权声明:自由转载-非商用-非衍生-保持署名 | Creative Commons BY-NC-ND 3.0
- 原文网址:http://www.cocosk.com/articles/2014⁄4/5/spring-injecting-inner-beans.html
- 作者:卧雪Sirk