struts2单独使用时action由struts2自己负责创建;与spring集成时,action实例由spring负责创建。
这导致在两种情况下struts.xml配置文件的略微差异。
 
假如:LoginAction在包cn.edu.jlu.cs.action中。
 
1. struts2单独使用时,action的class属性为LoginAction的全路径名,如下:
...
<action name="login" class="cn.edu.jlu.cs.action.LoginAction">
<result name="studentSuccess">
/student/studentindex.jsp
</result>
...
2. struts2与spring集成时,class属性是spring的applicationContext.xml中配置的bean的id属性值。
---------------------------------------------------------------------------------------
//struts.xml
...
<action name="login" class="LoginAction">
<result name="studentSuccess">
/student/studentindex.jsp
</result>
...
----------------------------------------------------------------------------------------
//applicationContext.xml
...
<bean id="LoginAction" class="cn.edu.jlu.cs.action.LoginAction" />
...
----------------------------------------------------------------------------------------
struts2-spring-plugin-2.1.6.jar这个插件在产生action的时候,会自动的按照名字把action的
属性注入进去,
即使不在spring配置文件中为相关的action(bean)注入属性或者在action类中用注解注入,
它也会按照action类中属性的名字从当前容器(??Spring)中找有没有这个名字的bean
并注入进来,或者显示的给定一个名字注入。
所以action的id(spring配置文件中的)不要和它类里边的变量名相同
如果在struts.xml文件中配置action的class是指向action的实际类,那么action的产生由
struts控制,
此时action类中的相关变量会按照名称从容器中注入一个相应的bean,如果找不到对应名
称的bean,一旦调用这个action就会出错。
但是如果此时为变量加上一个@Resource注解,struts容器产生过action后就会从Spring容器
中找相应的bean注入。
如果class指向的是一个伪控制器(对应spring配置文件中action的bean),那么action的产生由
spring控制。
此时action类中的相关变量··必须··用注解@Resource或者xml的方式自定义注入相应的bean,
不象之前会按照名字从spring容器中自动查找注入bean,否则程序运行出错。
  
更贴切点说应该是有struts-spring的插件来控制和spring容器控制,有插件来控制,则Action
的实例由插件来产生,
而启动spring容器的自动装配功能,将所需要的业务组件自动装配到Action实例中。该策略中,
spring只负责管理依赖关系。
优点:配置简单。
缺点:1、Action与业务组件耦合度降到了代码层次,要求Action中的属性名要和配置文件中业务组件的
id保持一致,耦合度高。
2、由spring自动装配,依赖关系不明了,可读性差。 第二种,由spring容器控制,Action配看做一个普
通的bean实例,需改变scope的默认值。struts.xml中Action的class属性对应spring容器中一个Action实
例的id。
优点:实现了高度的解耦。
缺点:1、配置文件冗余、臃肿。不仅需要在struts.xml中配置Action的信息还需要在spring的配置文件
中配置个Action的信息
 
 
来自:https://www.oschina.net/code/snippet_1587519_46034

Struts2中Action由自己与由Spring管理的区别的更多相关文章

  1. Struts2中Action取得表单数据的几种方法

    Struts2中Action取得表单数据的几种方法   Struts2中Action获得表单数据的几种方法struts2 Action获取表单传值 1.通过属性驱动式JSP: <form act ...

  2. 关于struts2中action请求会执行两次的问题

    关于struts2中action请求会执行两次的问题     在struts2中发现,调用action中的方法,方法会被执行两次,后来发现调用的方法是get开头的,把它改为其他名称开头的后,就不会执行 ...

  3. struts2中Action到底是什么,怎么理解

    struts2中Action到底是什么,怎么理解 1.配置完web.xml2.创建视图页面login.jsp3.创建业务控制器LoginAction类(解释说:创建业务控制器LoginAction类, ...

  4. jap页面获取struts2中action中变量的值

    在jsp页面中可以通过ONGL表达式获取struts2中action处理后的变量的值,这是因为每一个action在初始化后都会放到strackcontext中,可以通过ONGL表达式取到值. 注意要在 ...

  5. Struts2中Action接收参数的方法

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt112 Struts2中Action接收参数的方法主要有以下三种: 1.使用A ...

  6. Struts2中Action接收参数的方法主要有以下三种:

    Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数(最原始的方式):     a.定义:在Action类中定义属性,创建get和set方法:     b.接 ...

  7. 基于用户登陆的struts2中action的分类详解

    在struts2中action的分类有:继承 ActionSupport 实现 Action,模型驱动(ModelDriven)的 Action,多方法的 Action三种方式. 1.继承 Actio ...

  8. Struts2中Action自己主动接收參数

    Struts2中Action接收參数的方法主要有下面三种: 1.使用Action的属性接收參数:(通过属性驱动式)     a.定义:在Action类中定义属性,创建get和set方法.     b. ...

  9. Struts2中Action接收参数

    Struts2中Action接收参数的方法主要有以下三种: Struts2中Action接收参数的方法主要有以下三种: 1.使用Action的属性接收参数:     a.定义:在Action类中定义属 ...

随机推荐

  1. CSS和CSS选择器

    一:CSS CSS有三种书写形式(优先级从高到低) 1)行内样式:(内联样式)直接在标签style属性中书写 2)内页样式:在本网页的style标签中书写 3)外部样式:在单独的CSS文件中书写,然后 ...

  2. java的(PO,VO,TO,BO,DAO,POJO)解释

    java的(PO,VO,TO,BO,DAO,POJO)解释 O/R Mapping 是 Object Relational Mapping(对象关系映射)的缩写.通俗点讲,就是将对象与关系数据库绑定, ...

  3. 微信公众号红包接口开发PHP开发 CA证书出错,请登陆微信支付商户平台下载证书

    微信红包接口调试过程中一直提示“CA证书出错,请登陆微信支付商户平台下载证书”,经反复调试,大致解决方法如下: 1.首先确保CA证书的路径是否正确,一定得是绝对路径,因为是PHP开发的,这里需要三个p ...

  4. Android 如何通过代码模拟按钮点击 延时函数

    View.performClick();   比如: private Button mButton01;    mButton01 = (Button)findViewById(R.id.myButt ...

  5. scikit-learn使用笔记与sign prediction简单小结

    经Edwin Chen的推荐,认识了scikit-learn这个非常强大的python机器学习工具包.这个帖子作为笔记.(其实都没有笔记的意义,因为他家文档做的太好了,不过还是为自己记记吧,为以后节省 ...

  6. 从一个数组中提取出第start位到第end位

    假设通过数组in来表示一个很大的数(in[0]表示最低bit),提取该数的第start位到第end位(计数起始位为0): #define MAX_BYTE_LEN ( 48 ) int getData ...

  7. linux下JDK1.7安装

    http://mnt.conf.blog.163.com/blog/static/115668258201210793915876/ 一.软件下载1.下载JDK(下面分别是32位系统和64位系统下的版 ...

  8. Spring Application Event Example

    Spring Application Event 项目结构 工程下载 https://github.com/xiaoheike/SpringApplicationEventExample.git Sp ...

  9. akka各模块

    Akka的模块化做得非常好,它为不同的功能提供了不同的Jar包. akka-actor-2.0.jar – 标准Actor, 有类型Actor,等等 akka-remote-2.0.jar – 远程A ...

  10. service的简单使用

    Service的生命周期方法比Activity少一些,只有onCreate, onStart, onDestroy 我们有两种方式启动一个Service,他们对Service生命周期的影响是不一样的. ...