Strust2 internal Container 如何将spring容器中的bean注入到静态类中的?
在struts-plugin.xml这个文件中的配置信息,如下:
<bean type="org.apache.struts2.rest.handler.ContentTypeHandler"
name="xml"
class="org.apache.struts2.rest.handler.XStreamHandler" />
<bean type="org.apache.struts2.rest.handler.ContentTypeHandler"
name="json"
class="org.apache.struts2.rest.handler.JsonLibHandler" />
<bean type="org.apache.struts2.rest.handler.ContentTypeHandler"
name="html"
class="org.apache.struts2.rest.handler.HtmlHandler" />
<bean type="org.apache.struts2.rest.handler.ContentTypeHandler"
name="x-www-form-urlencoded"
class="org.apache.struts2.rest.handler.FormUrlEncodedHandler" />
<bean type="org.apache.struts2.rest.handler.ContentTypeHandler"
name="multipart/form-data"
class="org.apache.struts2.rest.handler.MultipartFormDataHandler" />
type一般是一组bean的接口,而class 是每个bean的实现类,而name则是这些bean的具体名字,这个名字起到了这个配置项目的identity作用。
在java代码中当在上下文中拿到container对象之后,可以通过如下方式来操作配置在struts2配置文件中的bean:
Set<String> names = container.getInstanceNames(ContentTypeHandler.class);
通过接口类,找到容器中所有实现了这个接口的bean
container.getInstance(ContentTypeHandler.class, name);
参数name就是 bean配置项目的name属性,在配置文件中配置的bean应该都是单例的。
有一个问题一直不太理解,在struts-default.xml文件中定义的一个类型的几个实例对象,如下:
<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="struts" class="org.apache.struts2.dispatcher.mapper.DefaultActionMapper" />
<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="composite" class="org.apache.struts2.dispatcher.mapper.CompositeActionMapper" />
<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful" class="org.apache.struts2.dispatcher.mapper.RestfulActionMapper" />
<bean type="org.apache.struts2.dispatcher.mapper.ActionMapper" name="restful2" class="org.apache.struts2.dispatcher.mapper.Restful2ActionMapper" />
同样是org.apache.struts2.dispatcher.mapper.ActionMapper 这个接口,但是有四种不同的实现,但是在org.apache.struts2.dispatcher.FilterDispatcher
/**
* Modify ActionMapper instance.
* @param mapper New instance
*/
@Inject
public void setActionMapper(ActionMapper mapper) {
actionMapper = mapper;
}
这个类中的方法,那在运行期,struts2容器到底会将那个版本的实现注入进来呢?
经过试验如果在strust.xml 中定义两个bean实现相同的接口:
<bean name="testImpl1" class="com.koubei.profile.test.TestImpl1"
type="com.koubei.profile.test.ITestInterface"/>
<bean name="default" class="com.koubei.profile.test.TestImpl2"
type="com.koubei.profile.test.ITestInterface"/>
在Action中实现设置一个函数:
@Inject
public void setTestInterface(ITestInterface testInterface) {
this.testInterface = testInterface;
}
会把名字为name为default的实现版本注入到action中,这样问题又来了,在默认的struts-default.xml文件中有配置的bean的name并不是以default开头的,那他们是按照怎么一个规则被注入到别的bean中的呢?
这个可以查看一下 struts.properties 配置文件 http://struts.apache.org/2.0.11/docs/strutsproperties.html
分享到:
相关推荐
通过学习这个"S2SH框架实例——个人备忘录系统源码",开发者不仅可以掌握S2SH框架的基本用法,还能了解到实际开发中的最佳实践和常见问题解决方案。这将为后续更复杂的Web应用开发打下坚实基础。
在本篇“jQuery+json+struts2 开发备忘录(一)...在实际项目中,还需要考虑错误处理、性能优化、安全问题等多方面因素,但这篇备忘录提供了一个基础的开发框架,对于初学者或需要快速上手的开发者具有很好的参考价值。
本备忘录将深入探讨Struts的核心概念、架构以及如何在实际项目中使用它。 **1. MVC模式** Struts是基于Model-View-Controller(MVC)设计模式的,这种模式有助于分离业务逻辑、数据模型和用户界面。Model代表业务...
在IT领域,特别是Java企业级应用开发中,整合Struts、Spring、Hibernate(简称SSH)框架与WebLogic服务器是常见的架构方案。以下是基于标题“struts+spring+hibernate3+webligic812环境配置备忘录”的详细知识点解析...
该系统旨在解决传统备忘录管理中的问题,实现信息化和网络化,提高备忘录管理的效率和经济性。 备忘录管理系统的需求分析 传统的备忘录管理模式存在许多问题,如信息化程度不高、管理效率不高等。为了解决这些问题...
【标题】中的“大学毕业设计 项目实训 个人备忘录系统(java SSH网站源代码)”表明这是一个基于Java的SSH框架实现的个人备忘录系统,适用于大学生进行毕业设计或项目实训。SSH是Struts2、Spring和Hibernate三个开源...
在Struts2中,Action类是业务逻辑的载体,每个Action对应用户的一个请求。Action可以通过实现`com.opensymphony.xwork2.Action`接口或继承`org.apache.struts2.actions.support.AbstractActionSupport`基类来创建。...
这个"MVC.rar"压缩包中包含的"MVC备忘录"项目,是一个使用Java MVC框架和MySQL数据库实现的简单备忘录应用。通过解压并分析源代码,我们可以深入理解MVC模式在实际开发中的应用,以及如何利用Java和MySQL来构建Web...
在Java Web开发中,SSHF(Struts2、Spring、Hibernate和FreeMarker)是一个常见的技术栈,用于构建高效、可维护的MVC应用程序。这些框架的整合能够提供强大的功能,如模型-视图-控制器架构、依赖注入、持久化管理和...
“备忘录”顾名思义是指用户向系统中添加当下没有完成的事情或计划做的事情;“信息”是指系统用户间相互发送信息,交流思想;“日志”就是用户在系统中发表日志;“资料搜索”这里只限本站搜索。 后台系统管理员的...
3. 行为型模式:了解策略、模板方法、观察者、迭代器、职责链、命令、访问者、备忘录等模式,优化程序结构。 五、框架应用 1. Spring框架:理解依赖注入原理,熟练使用Spring Boot、AOP、IoC容器、事务管理等。 2. ...
Java中有23种经典设计模式,如工厂模式、建造者模式、单例模式、工厂方法模式、抽象工厂模式、原型模式、适配器模式、桥接模式、组合模式、装饰器模式、享元模式、代理模式、命令模式、解释器模式、访问者模式、迭代...
3. 备忘录:用户可以添加和管理自己的计划和任务。 4. 信息:用户可以与其他用户进行信息交流和讨论。 5. 日志:用户可以发布和管理自己的日志。 6. 资料搜索:用户可以搜索和管理自己的数字资源。 系统的后台管理...
功能设计涵盖了管理员和用户的不同角色,如管理员可以管理用户、维护每日打卡、备忘录、学习计划、资源和论坛,而用户则能访问个人中心、参与打卡、使用学习资源等。数据库设计则是根据功能需求规划数据表结构,确保...
3. 行为型模式:观察者、模板方法、策略、职责链、命令、解释器、迭代器、备忘录、状态、访问者。 八、框架知识 1. Spring框架:IoC容器、AOP、事务管理、Spring Boot。 2. MyBatis:SQL映射、动态SQL、事务控制。 ...
同时,管理员和备忘录功能也具备类似的数据管理能力,支持分类查询,这进一步提升了数据处理的灵活性和实用性。 关键词:汽车销售管理系统、JSP、MVC、SSH 总的来说,这个汽车销售管理系统通过运用先进的软件技术...
- 行为型模式:责任链、命令、解释器、迭代器、访问者、备忘录、状态、策略、模板方法、观察者。 6. **框架应用**: - Spring框架:IoC容器、AOP、MVC架构、Spring Boot、Spring Cloud等。 - MyBatis:SQL映射、...
3. **备忘录**:提供一个记录待办事项和计划的平台,帮助用户管理时间。 4. **信息**:允许用户之间发送消息,促进思想交流。 5. **日志**:用户可以在系统中发布日志,分享心得或记录生活。 6. **资料搜索**:用户...
在"学生通讯管理系统"中,MySQL用于存储用户信息、通信录数据、会议记录、学习笔记、通知和备忘录等各类数据,确保数据的安全性和一致性。 MyEclipse是开发此系统的集成开发环境(IDE),它是一个强大的Java EE集成...
6. **备忘录模式**:在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。 7. **解释器模式**:给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言...