sturts2之bean元素的作用
在看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 optional="true"/><bean optional="true"/></struts>
static void setFreemarkerManager(org.apache.struts2.views.freemarker.Freema rkerManager mgr) static void setCustomEncoding(java.lang.String enc)
<bean name="struts" optional="true"/>