S2Container框架学习笔记之一
来源:互联网 发布:农村淘宝网下载电脑版 编辑:程序博客网 时间:2024/05/16 14:35
S2Container的官网:http://s2container.seasar.org/2.4/ja/
前提,准备好JAVA的开发环境。
1. 添加jar包
(1). 首先是添加如下的S2-Framework的jar包和配置文件
lib/s2-framework-2.4.x.jar
lib/aopalliance-1.0.jar
lib/commons-logging-1.1.jar
lib/javassist-3.4.ga.jar
lib/ognl-2.6.9-patch-20070624.jar
lib/geronimo-j2ee_1.4_spec-1.0.jar (在非J2EE环境的时候添加)
lib/portlet-api-1.0.jar (要使用Portlet的时候添加)
lib/log4j-1.2.13.jar (要使用Log4J的时候添加)
resources/log4j.properties (要使用Log4J的时候添加)
resources/convention.dicon (要使用「SMART deploy」的时候添加)
resources/creator.dicon (要使用「SMART deploy」的时候添加)
resources/customizer.dicon (要使用「SMART deploy」的时候添加)
(2). 要使用Seasar2的扩展功能时(S2JTA, S2DBCP, S2JDBC, S2Unit, S2Tx, S2DataSet)时,需要添加如下的S2-Extension的jar包和配置
lib/s2-extension-2.4.x.jar
lib/junit-3.8.2.jar (需要单体测试的话添加)
lib/poi-3.0-FINAL.jar (需要使用Excel来做单体测试的时候添加)
lib/geronimo-jta_1.1_spec-1.0.jar (需要使用S2JTA或S2Tx的时候添加)
lib/geronimo-jta_1.1_spec-1.0-tsr.jar (需要使用S2JTA或S2Tx的时候添加)
lib/geronimo-ejb_2.1_spec-1.0.jar (需要使用S2Tx的EJB互换功能的时候添加)
resources/jdbc.dicon
(3). 要使用Java5对应的功能,需要添加如下的S2-Tiger的jar包
lib/s2-tiger-2.4.x.jar
lib/geronimo-annotation_1.0_spec-1.0.jar (使用@Resource注解时添加)
lib/geronimo-jpa_3.0_spec-1.0.jar (使用S2JDBC或者JPA时添加)
lib/geronimo-ejb_3.0_spec-1.0.jar (使用EJB3的时候添加)
lib/geronimo-interceptor_3.0_spec-1.0.jar (使用EJB3的时候添加)
2. 配置文件
要使用S2Container,必须配置好一定的配置文件。这些配置文件的格式是xml,扩展名是dicon。
配置文件的基本样式如下
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE components PUBLIC "-//SEASAR//DTD S2Container 2.4//EN""http://www.seasar.org/dtd/components24.dtd"><components> <component name="..." class="..."> ... </component> <component name="..." class="..."> ... </component></components>
<include path="convention.dicon"/>
S2Container是DI容器,编写的类可以以组件的形式配置到dicon里,这一点跟Spring很像。
3. 获取容器对象的方法
(1) 通过SingletonS2ContainerFactory
SingletonS2ContainerFactory.init();S2Container container = SingletonS2ContainerFactory.getContainer();不指定的话默认配置文件是app.dicon(Web应用的话是WEB-INF/classes/app.dicon)。
要指定的话,在init()之前调用setConfigPath(String Path),例
private static final String PATH = "aaa/bbb/ccc.dicon";...SingletonS2ContainerFactory.setConfigPath(PATH);SingletonS2ContainerFactory.init();S2Container container = SingletonS2ContainerFactory.getContainer();在Web应用中,SingletonS2ContainerFactory.init()会在S2ContainerServlet里被自动调用。
(2)通过S2ContainerFactory生成
private static final String PATH = "aaa/bbb/ccc.dicon";...S2Container container = S2ContainerFactory.create(PATH);通过这种方法生成的容器对象,需要在程序里管理。S2ContainerFactory是在SingletonS2ContainerFactory的内部被调用的。
(3)Web应用在S2ContainerServlet自动创建,但是需要在web.xml里配置这个servlet
<servlet> <servlet-name>s2servlet</servlet-name> <servlet-class>org.seasar.framework.container.servlet.S2ContainerServlet</servlet-class> <init-param> <param-name>configPath</param-name> <param-value>app.dicon</param-value> </init-param> <init-param> <param-name>debug</param-name> <param-value>false</param-value> </init-param> <load-on-startup>1</load-on-startup></servlet><servlet-mapping> <servlet-name>s2servlet</servlet-name> <url-pattern>/s2servlet</url-pattern></servlet-mapping>configPath指定默认配置文件,
debug参数是true的话,可以运行中重新加载S2Container容器。重加载的方法是访问如下URL
http://localhost:8080/xxx/s2servlet?command=restart另外还可以查看加载了什么组件
http://localhost:8080/xxx/s2servlet?command=list
4. 获取组件对象的方法
S2Container.getComponent(Object componentKey)有同名类时,报TooManyRegistrationRuntimeException错,所以最好所有的类都是唯一的。
Java5里使用S2Tiger时,使用SingletonS2Container获取组件对象则不需要进行类型转换。要使用SingletonS2Container,必须Seasar2.4以上。
示例代码:
Hoge hoge = (Hoge) container.getComponent(Hoge.class);Hoge hoge = SingletonS2Container.getComponent(Hoge.class);Hoge hoge = (Hoge) container.getComponent("hoge");Hoge hoge = SingletonS2Container.getComponent("hoge");
组件的依赖注入可以分为:构造方法注入、set方法注入、指定方法注入和属性注解绑定注入。配置或编写方法分别如下:
<components> <component name="..." class="..."> <arg>...</arg> </component></components>
<components> <component name="..." class="..."> <property name="...">...</property> </component></components>
<components> <component name="..." class="..."> <initMethod name="..."> <arg>...</arg> </initMethod> </component></components>
@Binding("foo")private Foo foo;
在配置里通过instance属性来指定组件对象的作用域
如果不在配置文件里配置组件的注入的话,S2Container会根据组件的类定义里的autoBinding注解的指定值,以及名字匹配来自动实施注入。
其中autoBinding的值有如下几种形式:
S2Container容器对象的生命周期是从S2Container.init()被调用开始,到S2Container.destroy()结束。
在Web应用里,它与S2ContainerServlet的生命周期一致。
至于组件对象的生命周期,单例的话是与S2container容器周期一致,其它形式的话,是在取得对象是被实例化。
正如上面提到的,想要在request、session、application里管理组件实例,需要在web.xml配置S2ContainerFilter,配置示例如下
<web-app> <filter> <filter-name>s2filter</filter-name> <filter-class>org.seasar.framework.container.filter.S2ContainerFilter</filter-class> </filter> <filter-mapping> <filter-name>s2filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping></web-app>
- S2Container框架学习笔记之一
- S2Container框架学习笔记之二
- S2Container框架学习笔记之三
- S2Container框架学习笔记之四
- 学习公司OA框架笔记之一
- iOS学习笔记23-框架搭建之一------引入ASIHttp框架
- php框架之美 yii学习笔记之一
- 黑马程序员---Objective-C Foudation框架学习笔记之一
- spring框架学习之一
- 框架学习之一认识框架
- 学习笔记之一
- C#学习笔记之一
- Jabber学习笔记 之一
- C++学习笔记之一
- ABAP学习笔记之一
- 学习笔记之一
- java学习笔记之一
- Strus学习笔记之一
- JFreeChart教程
- 各种排序算法的稳定性和时间复杂度小结
- android:gallery相册
- Hql获取记录条数
- 【总结】火狐与IE浏览器之间的一些差别收集
- S2Container框架学习笔记之一
- CreateDirectory 和 PathFileExists 为什么调用dllhost.exe进程
- JFreeChart教程
- Debian 添加普通用户并添加sudo权限
- C++ 的"const char* const*"类型解析
- Linux中的同步机制
- JavaScript 添加Cookie,读取Cookie,删除Cookie
- 新手学习数据结构与算法---堆栈的应用之进制转换
- websphere中获取项目文件路径