解读struts.xml文件自动加载方法的方式以及service层的自动注入

来源:互联网 发布:圣诞节怎么过知乎 编辑:程序博客网 时间:2024/06/12 23:45

关于动态调用action类中的方法

(如果不动态调用,那么就是默认调用action类中的execute()方法)

方式一:

配置文件不用改,但是请求的路径要改为:action类名+!+方法名+.action
比如,UserAction中有一个login方法,那么请求路径(表单中的action值)为:user!login.action

方式二:

需要修改配置文件,假设UserAction中有一个login方法,那么<action>节点就要加一个属性method,值等于login
<action name="user" class="cn.struts2.action.UserAction" method="login"> ....(result节点) </action>

方式三:

使用通配符的方式,
比如:<action name="user_*" class="cn.struts2.action.UserAction" method="{1}">
这里的*是通配符,可以匹配任意字符,而method的值{1}就是*的内容,
比如页面请求user_login.action,那么{1}就等于login,就是说method="login",那么根据第二种方式,就会执行UserAction中的login方法
同样,通配符可以用多个,
<action name="*_*" class="cn.struts2.action.UserAction" method="{2}">
页面上请求user_login同样可以调用login方法,但是这里method={2},通配符是匹配的字符串,
这里第一个*相当于user,第二个*相当于login,所以method="{2}"

所以,当请求的方法是第n个*的内容时,method={n}



spring配置 在*Action中自动注入service层中相应的*Service

 (在application-core.xml文件中加入AOP编程添加事物)

<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的实例注入

 

如果<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则为空


原创粉丝点击