public class LoginAction extends ActionSupport{
private LoginService loginService;
public void setLoginService(LoginService loginService) {
System.out.println("init Service......");
this.loginService = loginService;
}
spring配置
<bean id="loginService" class="org.xxxxx.services.impl.LoginServiceImpl"></bean>
<bean id="loginAction" class="org.xxxxx.action.LoginAction">
</bean>
struts配置
<action name="login" class="org.xxxxx.action.LoginAction">
<result name="success">/result.jsp</result>
<result name="error">/login.jsp</result>
</action>
注意看以上两个红线部分,在struts.xml中action指定的class像上面这种方式指定全类路径名的话,这时,不论spring配置文件中的<bean id="loginAction" class="org.xxxxx.action.LoginAction"></bean>有没有指定<property name="loginService" ref="loginService"/>,只要有<bean id="loginService" .../>存在,并且这个ID的名字与Action中成员bean的名字一致,当实例化Action类时,会一并将loginService的实例注入
注意,测试发现只有bean property 的名字和ref bean的名字完全相同的情况下spring才能自动注入 类中的属性
<!-- actions -->
<bean id="testloginaction" class="com.cyhbw.action.TestLoginAction">
<property name="userservice">
<ref bean="userservice"/>
</property>
</bean>
如果<action name="login" class="loginAction">这里的class指定spring配置文件中的bean的id,则不会出现loginService自动注入问题,而是根据<bean id="loginAction" class="org.xxxxx.action.LoginAction"></bean>有没有指定<property name="loginService" ref="loginService"/>来决定,有<property name="loginService" ref="loginService"/>的指定,则实例化Action类时,会一并将loginService实例注入,没有配置property,loginService则为空