在看struts2的bean元素配置时一直对这个元素的作用不是很清楚,尽管官方文档说它有两个作用:对象注入和值注入,当时说的都相当抽象。于是上网查了很多资料,并且查了下webwork in action这本书,发现bean元素是struts2里面才引入的,无意间又看了下官方文档中plug-in这节,这才对bean元素的作用有了一点领悟,下面谈下个人理解。在这之前,首先说下struts2中的依赖注入(dependency injection)。
其实依赖注入就是我们常说的反转控制(IoC),在bean配置的那节中一开始就提到,框架使用它自己的依赖注入容器,原文是这样的:Internally, the framework uses its own dependency injection container.这个容器负责装载一些关键的框架对象,因此框架的任何部分都能以一种标准有序的方式被取代、扩展和移去。我查看了文档中overview中的dependency injection这节,struts2内置的IoC容器是基于Google Guice的。我查了下相关资料,发现Google Guice是Google公司最近发布的一个轻量级IoC容器,与spring相比它具有如下特点:1.速度快,号称是srping的100倍;2.无需配置文件,完全依赖jdk5.0的泛型和注释(Annotation)来描述依赖;3.简单代码量少。在Struts2中已经集成了Google Guice容器。创建我们所请求的action的对象以及将页面上文本框中的值按照名字注入到action对象的各个域中去应该都归功于这个Google Guice容器吧,不然我们的action是由谁创建的呢?action中各个属性的值又是谁给我们注入的呢?
现在我们再来谈bean配置到底什么作用的?因为bean的两个作用对象注入和值注入都跟注入扯上了关系,因此我想bean的作用和那个内容的IoC容器是有关系的。接着我们看plugin那节中对sitemesh的讲述。Struts-plugin.xml文件中bean配置是这样的:
<struts>
<bean class="org.apache.struts2.sitemesh.FreeMarkerPageFilter"
static="true" optional="true"/>
<bean class="org.apache.struts2.sitemesh.VelocityPageFilter"
static="true" optional="true"/>
</struts>
接着有这么一段话:这个两个bean元素,通过使用”static”标记来告诉struts框架在启动的时候将当前的设置和框架对象注入到它们的静态的属性设置器(setter)中。这样的话,FreeMarkerPageFilter类就会得到一个Struts的FreemarkerManager类的实例以及当前的编码设置。原文如下:
The two bean elements, with the "static" flag enabled, tell Struts to inject the current settings and framework objects into static property setters on startup. This allows, for example, the FreeMarkerPageFilter class to get an instance of the Struts FreemarkerManager and the current encoding setting.
怎么去理解呢?打开struts发布包中关于sitemesh的文档,找到FreeMarkerPageFilter这个类,看一下它的静态的属性设置方法,共有下面两个:
static void
setFreemarkerManager(org.apache.struts2.views.freemarker.Freema
rkerManager mgr)
static void
setCustomEncoding(java.lang.String enc)
上面说框架在启动的时候会将一个Struts的FreemarkerManager类的实例注入到FreeMarkerPageFilter中去,那么这个FreemarkerManager类的实例从哪儿来呢?这正是我们在struts-default.xml定义的一个bean,如下所示:
<bean class="org.apache.struts2.views.freemarker.FreemarkerManager" name="struts"
optional="true"/>
这样的话,bean元素的第一个作用----对象注入就能够很容易的理解了:bean(如FreemarkerManager)由框架容器创建并被注入到其它的内部框架对象(如FreeMarkerPageFilter)中去。那么第二个作用值注入怎么理解呢?前面已经说了,框架会在启动的时候将当前的编码设置注入到FreeMarkerPageFilter中,这个编码设置是我们的一个框架常量,而这正式值注入的作用:有利于那些不是由容器创建的对象接收框架常量(如编码)。这样的话值注入也就能够很容易的理解了。另外,要注意的一点就是,一个bean要想被注入的话,必须定义它的”static”属性。
分享到:
相关推荐
例如,当你在`<struts>`元素下键入`时,Eclipse会列出所有可能的子元素,如`<bean>`, `<constant>`, `<include>`, `<package>`等。按`Alt+?`键可在当前元素内部获取属性提示,包括属性的必需性和可选值。 请注意,...
通过以上对 `struts.xml` 和 `struts.properties` 文件的详细介绍,我们可以看出这两个文件在Struts2框架中的核心作用。`struts.xml` 主要关注于Action的映射和Result的定义,而 `struts.properties` 更多地关注于...
在这个主题“Struts2_访问web元素_accessWebElements_s”中,我们将深入探讨如何在Struts2中有效地访问和操作web元素。 首先,了解Struts2的生命周期至关重要。当一个HTTP请求到达服务器时,Struts2框架会接管请求...
1. **Action和Form Bean**:在Struts2中,Action类代表了业务逻辑,而Form Bean(通常称为ActionForm)则封装了来自页面表单的用户输入。验证过程通常发生在Action执行之前,对Form Bean的属性进行检查。 2. **...
在Struts2框架的应用开发过程中,配置文件起到了至关重要的作用。Struts2主要依赖于两种基于XML的配置文件:`web.xml` 和 `struts-config.xml`(通常命名为 `struts.xml`)。本文将详细介绍这两种配置文件的作用及...
Struts2标签库是其核心组件之一,它提供了丰富的前端界面构建工具,能够帮助开发者快速构建动态网页。下面将详细介绍Struts2标签库中的部分常用标签,并将其与Struts1进行对比,以便更好地理解它们的功能。 #### 1....
Struts2 标签库详解 Struts2 提供了一个强大的标签库,用于简化 Web 应用程序的开发过程。这些标签可以分为两类:通用标签和 UI 标签。下面,我们将详细介绍 Struts2 标签库的使用。 4.1 通用标签 通用标签用来...
2. **struts-bean.tld** struts-bean.tld文件包含的是关于对象操作的标签,主要用于在JSP页面上创建、读取、设置和显示JavaBean对象的属性。例如,`<bean:define>`用于在JSP上下文中定义一个新的变量,`<bean:write...
其中,**Ajax支持**是Struts2中的一个重要特性之一。 ##### Ajax支持的基础 - **Dojo**:这是一个非常成熟的JavaScript库,提供了丰富的UI组件和页面特效。Dojo使得创建高度交互性的用户界面变得容易,同时简化了...
配置文件在Struts2中起着至关重要的作用,因为它定义了框架的行为和组件之间的交互方式。本文将深入探讨Struts2配置文件的DTD(文档类型定义),以及如何使用这些配置元素。 首先,Struts2的配置文件基于DTD来解析...
配置文件(struts.xml)用于定义Action、结果类型、包等核心元素,实现了基于注解或XML的配置方式。此外,Struts2还支持OGNL(Object-Graph Navigation Language)作为表达式语言,用于数据绑定和页面动态渲染。 **...
`<s:iterator>`标签是Struts2中最常用的标签之一,它可以用来遍历集合(如List、Set、Map等)。但是,如果想要实现类似Java中的`for`循环功能,可以利用`org.apache.struts2.util.Counter`类来实现。 ### 实现步骤 ...
Struts2可以与其他验证库如Hibernate Validator或JSR-303 Bean Validation进行集成,利用它们丰富的验证注解和功能。 8. **Struts2的ActionContext**: ActionContext在验证过程中起到传递作用,它保存了请求、...
1. 在Struts配置文件(struts-config.xml)中,可以通过`<message-resources>`元素定义资源文件的位置和名称: ```xml ``` 这里的`parameter`属性值应与`<bean:message>`标签中的`bundle`属性相对应。 2. 资源...
2. **UI组件标签**:Struts2提供了多种UI组件标签,如文本输入框 `<s:textfield>`,复选框 `<s:checkbox>`,下拉列表 `<s:select>`等,它们不仅包含HTML元素,还带有验证和错误处理功能。 3. **逻辑控制标签**:...