1.action的创建交给Spring
Action中的userService已经在applicationContext.xml配置,只需要把这个Action在applicationContext.xml中重新配置下
<bean id="userAction" class="com.domain.UserAction>
<property name="userService" ref="userService"/>
</bean>
在struts配置Action时,class属性不是原来Action类的位置(不然无法获取userService), 因此class应该写bean中的别名。
若是使用别名,则默认从spring容器中获得内容,getBean("userAction");
默认是获得单例,若是没有获得内容,将自己创建。
Spring中scope默认为singleton, 就是每次共用一个Action,但Action不是线程安全的,故applicationContext.xml中配置Action 有一属性scope 设其值为prototype,要求每一个线程创建一个独立的Action。
2.action的创建交给Struts
实际上只要保持Action中属性的属性名与applicationContext.xml中的bean名字相同,便会自动注入。不需要配置applicationContext.xml
比如说:直接在struts.xml中配置 <action name="userAction" class="com.domain.UserAction">....</action>
然后这个Action类中Field有一属性UserService userService, 恰好有一bean name="userService"在applicationContext.xml中配置,则只需要给userService加上set方法,便可实现自动注入。