日期:2014-05-19  浏览次数:20669 次

struts2+spring整合后的自动装配问题
框架综合在这篇文章的最后有一段
“开发者不必在Spring中去注册action,尽管可以这么去做,通常Struts框架会自动地从action mapping中创建action对象。默认情况下框架使用的自动装配策略是name,也就是说框架会去Spring中寻找与Action属性名字相同的bean,可选的装配策略还有:type、auto、constructor,开发者可以通过常量struts.objectFactory.spring.autoWire来进行设置。 创建实例时,不是利用配置Action时指定的class属性值,根据bean的配置id属性,从Spring容器中获得相应的实例。

我不怎么理解,请问谁能帮忙一下!?特别是这句话“框架会去Spring中寻找与Action属性名字相同的bean”,怎么理解呀?如果有例子最好了。控制器Action访问Spring的业务逻辑组件这一策略,开发者该如何使用?(初学者有说错的地方请指出并包含,谢谢)

------解决方案--------------------
“框架会去Spring中寻找与Action属性名字相同的bean”,比如说在你的Action类中有一个Services service的属性,框架会去找名称为service的属性所对应的类,将他实例化。
按照名称自动装配, 在<beans>节点中增加default-autowire="byName"属性定义.
<bean id="sameProperty" abstract="true">
<property name="id" value="100"></property>
<property name="name" value="heguangchao"></property>
</bean><!-- 对于里面的公用属性用parent来指定上面的抽象类id的配置 -->
<bean id="bean2" class="sino.spring.bean.Bean2" parent="sameProperty">
<property name="password" value="123"/>
</bean><bean id="bean3" class="sino.spring.bean.Bean3" parent="sameProperty"/><!-- 
<bean id="bean4" class="sino.spring.bean.Bean4">
<property name="bean2" ref="bean2"/>
<property name="bean3" ref="bean3"/>
</bean>
-->
<bean id="bean4" class="sino.spring.bean.Bean4"/>? <!-- 省去上面的注入方式 -->
保证在sino.spring.bean.Bean4类中的set方法为setBean2和setBean3,很显然不是很灵活,即要和上面申明的id的值要相同.