博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2与spring集成时,关于class属性及成员bean自动注入的问题
阅读量:6711 次
发布时间:2019-06-25

本文共 2264 字,大约阅读时间需要 7 分钟。

 

  正常来说按照Spring官方配置,在struts2与spring整合时,struts配置文件中class属性指向spring配置的bean id,但是在class指向类路径时,依然能注入service。

 

public class LoginAction extends ActionSupport{   private LoginService loginService;  public void setLoginService(LoginService loginService) {  System.out.println("init Service......");  this.loginService = loginService; }

 

 

spring配置

 

 

struts配置

/result.jsp
/login.jsp

 

 

1.注意看以上两个红线部分,在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的实例注入。

  并且还存在一个问题当struts.xml此种方式配置时,spring中如果配置了此action实例,并添加scope=“prototype”多例属性,则会在访问时报错。可能struts2本身是多例与spring实例化机制冲突。所以此种方式配置时,可废弃spring中的action类配置。

 

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

 

所以会产生两种struts与spring的配置方案:

(1)配置方案一:

在配置Action时,需要将class属性和Spring配置文件中的相对应的Action的bean的Id的属性保持一致,系统即可通过Spring来装配和管理Action。

如果action包含了Service层的对象:

private StudentInfoServiceImpl studentInfoService;

则需要添加set方法,才可以使用Spring依赖注入:

public void setStudentInfoService(StudentInfoServiceImpl studentInfoService) {

    this.studentInfoService = studentInfoService;

}

如果action在struts.xml如下配置:

/WEB-INF/exam/result.jsp
/WEB-INF/exam/error.jsp

 

则在applicationContext.xml文件中该Action的配置如下:

 

Struts2与Spring整合的方案二:

前面两个步骤和方案一的一样;

在配置struts.xml文件时,Action的class为该Action的类路径,而在applicationContext.xml配置文件中不需要添加Action的bean配置。这样,当我们使用Action类时,由于studentInfoService已经配置了相关的bean,所以会自动装配,并且action依然由spring进行实例化。

studentInfoService的配置:

 

 

重点studentInfoService和action中的属性要一样!!

Action在struts.xml中的配置如下:

/WEB-INF/exam/result.jsp
/WEB-INF/exam/error.jsp

 

转载地址:http://tfalo.baihongyu.com/

你可能感兴趣的文章
混淆矩阵
查看>>
生成1000万行7位数字文件(编程珠玑)
查看>>
初识 systemd
查看>>
PHP 使用 Redis
查看>>
JSON入门
查看>>
200行Go代码实现自己的区块链——区块生成与网络通信
查看>>
基于Eureka的服务治理
查看>>
微软不同系统版本的区别之一(家庭版,企业版等)
查看>>
CSS3实现全景图特效
查看>>
45. Jump Game II
查看>>
java.lang.String.regionMatches方法使用
查看>>
Hash表的扩容(转载)
查看>>
Javascript中双等号(==)隐性转换机制 JS里charCodeAt()和fromCharCode()方法拓展应用:加密与解密...
查看>>
Linux内核访问用户空间文件:get_fs()/set_fs()的使用
查看>>
打印机复印身份证方法
查看>>
MY_使用selenium自动登录126/163邮箱并发送邮件
查看>>
tp框架中的一些疑点知识--cookie和session的配置
查看>>
axios post提交的Content-Type
查看>>
Expected BEGIN_ARRAY but was BEGIN_OBJECT
查看>>
WPF 创建无边框的圆角窗口
查看>>