Seasar2.docx
- 文档编号:23067797
- 上传时间:2023-04-30
- 格式:DOCX
- 页数:44
- 大小:32.56KB
Seasar2.docx
《Seasar2.docx》由会员分享,可在线阅读,更多相关《Seasar2.docx(44页珍藏版)》请在冰豆网上搜索。
Seasar2
在日本,Seasar2这个框架十分的流行。
Seasar2其实就是类似于Spring的一个开源框架
大家有兴趣的话,可以去官方网站看看:
http:
//www.seasar.org/index.html
中文版现在还没完善,大家可能要用日文或则英文来了解
下面简单介绍一下:
所谓“Seasar2”就是一个“轻量级容器”,面向无法摆脱“Java应用开发”之烦恼的所谓“开发者”,它能够保证开发的“高生产率和高品质”。
并且同“其它轻量级容器”不同的是,“完全不需要书写设定文件”,“就算是应用程序发生改动也无需再次起动即可直接识别变更,因此具有脚本语言的灵活性”。
为了不用写设定文件也能够运行,ConventionoverConfiguration的思想得以采用。
ConventionoverConfiguration就是指,“只要遵守一个适当的规约,即使不用进行非常麻烦的设定,框架结构也可以自动替我们搞定的思想”,这一思想是RubyonRails中所倡导的。
Seasar2的ConventionoverConfiguration是从RubyonRails那里得到的提示而产生的。
使用Seasar2的话,对于仅仅需要维护数据表这样简单的应用,可以在不到3分钟的时间里作成。
应用程序发生改动之时也无需启动便可立即识别变更的机能在Seasar2里被称为HOTdeploy。
安装:
S2需要安装JDK1.4orJDK1.5。
将S2xxx.zip解压之后的seasar2目录引入到Eclipse、「文件→导入→既存的工程」。
使用Seasar2基本功能(S2Container,S2AOP)的时候、CLASSPATH的下面必须包含以下文件。
∙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/s2-framework-2.x.x.jar
∙lib/geronimo-j2ee_1.4_spec-1.0.jar(参考下面)
∙lib/portlet-api-1.0.jar(任选项)
∙lib/log4j-1.2.13.jar(任选项)
∙resources/log4j.properties(任选项)
∙resources/aop.dicon(任选项)
使用Seasar2的扩张机能(S2JTA,S2DBCP,S2JDBC,S2Unit,S2Tx,S2DataSet)的时候必须要将以下文件追加到CLASSPATH里面。
∙lib/junit-3.8.2.jar
∙lib/poi-2.5-final-20040804.jar
∙lib/s2-extension-2.x.x.jar
∙lib/geronimo-jta_1.1_spec-1.0.jar(参考下面)
∙lib/geronimo-ejb_2.1_spec-1.0.jar(参考下面)
∙resources/jdbc.dicon
根据应用软件所需的执行环境、选择以下需要引用的文件[geronimo-j2ee_1.4_spec-1.0.jar、geronimo-jta_1.0.1B_spec-1.0.jar、geronimo-ejb_2.1_spec-1.0.jar]
环境
geronimo-j2ee_1.4_spec-1.0.jar
geronimo-jta_1.1_spec-1.0.jar
geronimo-ejb_2.1_spec-1.0.jar
不完全对应J2EE的Servletcontainer
(Tomcat等)
不要
要
(使用S2JTA,S2Tx的时候)
要
(使用S2Tiger的时候)
完全对应J2EE的应用服务器
(JBoss,WebSphere,WebLogic等)
不要
不要
不要
独立
要
(使用S2JTA,S2Tx时候)
不要
不要
为了让大家更简单的体验数据库机能、使用了HSQLDB作为RDBMS。
为了能够体验Oracle机能、准备了hsql/sql/demo-oracle.sql。
SQL*Plus等执行了之后、请根据环境的需要改写jdbc.dicon的XADataSourceImpl的设定项目。
请使用S2Container用的插件Kijimuna。
想使用EJB3anoteshon的情况下、将S2TigerXXX.zip解压缩后的s2-tiger目录引入Eclipse、「文件→导入→既存的工程」。
在Seasar2的设定基础上、必需要将以下的文件追加到CLASSPATH里面。
∙lib/s2-tiger-x.x.x.jar
∙resources/jdbc.dicon
想使用Tigeranoteshon的情况、将S2TigerXXX.zip解冻后的s2-tiger目录引入Eclipse、「文件→进口→既存的项目」。
在Seasar2的设定基础上、必需要将以下的文件追加到CLASSPATH里面。
∙lib/s2-tiger-x.x.x.jar
快速上手
S2Container,就是进行DependencyInjection(注:
依赖注入——译者)(以后略称为DI)的一个轻量级容器。
DI,就是Interface和实装分离,程序相互之间仅通过Interface来会话的一种思考方式。
最初的一步
让我们赶快试一试吧。
登场人物如下。
∙问候语类
o返回问候语的字符串。
∙问候客户端类
o从问候类获得问候语(字符串)并输出到终端屏幕。
∙问候语应用主类
o启动用的类。
用来组织问候语类和问候语使用者类的组成方式。
Greeting.java
问侯语的Interface。
packageexamples.di;
publicinterfaceGreeting{
Stringgreet();
}
GreetingImpl.java
问候语的实装。
packageexamples.di.impl;
importexamples.di.Greeting;
publicclassGreetingImplimplementsGreeting{
publicStringgreet(){
return"HelloWorld!
";
}
}
GreetingClient.java
使用问候语的使用者客户端Interface。
packageexamples.di;
publicinterfaceGreetingClient{
voidexecute();
}
GreetingClientImpl.java
使用问候语的客户端的实装。
不是直接使用这个GreetngImpl(实装),而是通过Greeting(Interface)来实现问候的机能。
packageexamples.di.impl;
importexamples.di.Greeting;
importexamples.di.GreetingClient;
publicclassGreetingClientImplimplementsGreetingClient{
privateGreetinggreeting;
publicvoidsetGreeting(Greetinggreeting){
this.greeting=greeting;
}
publicvoidexecute(){
System.out.println(greeting.greet());
}
}
机能提供端和使用端的准备都完成了。
下面我们就执行一下试试吧。
GreetingMain.java
packageexamples.di.main;
importexamples.di.Greeting;
importexamples.di.impl.GreetingClientImpl;
importexamples.di.impl.GreetingImpl;
publicclassGreetingMain{
publicstaticvoidmain(String[]args){
Greetinggreeting=newGreetingImpl();
GreetingClientImplgreetingClient=newGreetingClientImpl();
greetingClient.setGreeting(greeting);
greetingClient.execute();
}
}
实行结果如下。
HelloWorld!
象这样机能的使用者(GreetingClientImpl)经由Interface(Greeting)的中介来使用机能,具体的机能对象(既Interface的实装类)在实行的时候由第三者(在这里是GreetingMain)来提供的情况,就是DI的基本思考方法。
但是,如果象GreetingMain中那样实装类的设定内容直接被写出来的话,一旦实装类需要变更的时候源代码也必须跟着修正。
为了避免这个麻烦,DIContainer就登场了。
把实装设定抽出到一个设定文件中,由DIContainer把这个设定文件读入并组织对象运行。
那么,让我们试着把刚才的提到的那个设定文件的内容写一下。
S2Container中,设定文件的后缀是".dicon"。
GreetingMain2.dicon
xmlversion="1.0"encoding="UTF-8"?
>
DOCTYPEcomponentsPUBLIC
"-//SEASAR//DTDS2Container2.3//EN"
"http:
//www.seasar.org/dtd/components23.dtd">
class="examples.di.impl.GreetingImpl"/> class="examples.di.impl.GreetingClientImpl"> class="examples.di.impl.GreetingImpl"/> 上文记载的是组件的定义。 在这里,相当于如下的Java代码。 Greetinggreeting=newGreetingImpl(); component标签的name属性指定了组件的名称,class属性指定了组件的Java类文件名。 下文就是greetingClient的设定。 class="examples.di.impl.GreetingClientImpl"> property标签的name属性指定了组件Java类中的属性名,标签的定义体则指定了一个组件名称。 这个设定相当于如下Java代码。 组件名要注意不要用["]括起来。 用["]括起来的话就会被当作字符串来处理了。 GreetingClientImplgreetingClient=newGreetingClientImpl(); greetingClient.setGreeting(greeting); 利用S2Container的起动类的内容如下。 GreetingMain2.java packageexamples.di.main; importorg.seasar.framework.container.S2Container; importorg.seasar.framework.container.factory.S2ContainerFactory; importexamples.di.GreetingClient; publicclassGreetingMain2{ privatestaticfinalStringPATH= "examples/di/dicon/GreetingMain2.dicon"; publicstaticvoidmain(String[]args){ S2Containercontainer= S2ContainerFactory.create(PATH); container.init(); GreetingClientgreetingClient=(GreetingClient) container.getComponent("greetingClient"); greetingClient.execute(); } } S2Container,是由S2ContainerFactory#create(Stringpath)做成的。 更加详细的内容请参照S2Container的生成。 组件(greetingClient),是由S2Container#getComponent(StringcomponentName)的方法取得的。 详细内容请参照组件的取得。 实行结果同先前一样表示如下。 HelloWorld! 经常同DI一起使用的是AOP。 AOP是指、将日志等的输出分散到复数个类中的逻辑模块化的一种技术。 那么、让我们不修改已经作成的GreetingImpl、GreetingClinetImpl的源代码? 试着将日志(追踪)输出。 适用于AOP的设定文件如下。 GreetingMain3.dicon xmlversion="1.0"encoding="UTF-8"? > DOCTYPEcomponentsPUBLIC "-//SEASAR//DTDS2Container2.3//EN" "http: //www.seasar.org/dtd/components23.dtd"> class="examples.di.impl.GreetingImpl"> class="examples.di.impl.GreetingClientImpl"> Seasar2中,经常使用的AOP模块在aop.dicon中预先定义。 象下面这样、使用include标签。 更加详细的? 敬请参照S2Container定义的分解和引入。 对于在组件中适用的AOP来说? 我们component标签的字标签aspect标签的正文中指定AOP的模块名称。 aop.traceInterceptor是AOP模块的名字。 AOP的设定如上所述。 那么就让我们执行一下GreetingMain3吧。 同GreetingMain2不同的仅仅是设定文件的路径而已。 GreetingMain3.java packageexamples.di.main; importorg.seasar.framework.container.S2Container; importorg.seasar.framework.container.factory.S2ContainerFactory; importexamples.di.GreetingClient; publicclassGreetingMain3{ privatestaticfinalStringPATH= "examples/di/dicon/GreetingMain3.dicon"; publicstaticvoidmain(String[]args){ S2Containercontainer= S2ContainerFactory.create(PATH); GreetingClientgreetingClient=(GreetingClient) container.getComponent("greetingClient"); greetingClient.execute(); } } 执行结果如下。 可以明白一点,没有修改源代码,日志就被输出了。 DEBUG2005-10-1121: 01: 49,655[main]BEGINexamples.di.impl.GreetingClientImpl#execute() DEBUG2005-10-1121: 01: 49,665[main]BEGINexamples.di.impl.GreetingImpl#greet() DEBUG2005-10-1121: 01: 49,665[main]ENDexamples.di.impl.GreetingImpl#greet(): HelloWorld! HelloWorld! DEBUG2005-10-1121: 01: 49,675[main]ENDexamples.di.impl.GreetingClientImpl#execute(): null 这样、S2Container的基本使用方法就被掌握了。 更进一步 但是,不管怎么说书写设定文件都是一件麻烦的事啊。 在S2Container中,为了尽可能的减少设定文件的记述量、采用了如下的概念。 ∙ConventionoverConfiguration 就是说制定一个适当的规约,遵守这个规约的话? 无需什么设定也可以运作。 比如说,刚才的设定文件中,象下面这样明确地指定属性的部分存在着。 class="examples.di.impl.GreetingClientImpl"> S2Container中、属性的类型是Interface的情形下? 如果要将属性类型的实装组件注册进软件容器中,不需要什么特殊的设定也可以自动得运作DI的机能。 这就是,如果遵守DI中推荐的所谓“属性类型用Interface定义”的规则,S2Container会自动地处理一切。 虽然一说到规约就容易产生麻烦之类的想法,“推荐而已,如果遵守的话就能使开发愉快”的话,遵守规约的动机就产生了。 这才是问题的重点。 如上的设定,可以做如下化简 class="examples.di.impl.GreetingClientImpl"> 实际上? 刚才的AOP的例子也适用“ConventionoverConfiguration”。 通常在AOP中,AOP的模块在什么地方适用是由pointcut指定的,S2AOP的情况下? 如果遵守所谓“使用Interface”这个推荐的规约,不指定pointcut,自动的适用于在Interface中定义的所有方法。 因为有这个机能,在刚才的那个例子中,就没有必要指定pointcut。 虽然根据“ConventionoverConfiguration”,DI和AOP的设定可以得以简化,需要处理的组件数增加了、仅仅组件的注册也会变成一个非常累的作业。 那么这个组件注册自动化就叫做组件自动注册机能。 刚才的GreetingImpl、GreetingClientImpl的注册自动化如下。 class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister"> FileSystemComponentAutoRegister组件将addClassPattern方法指定的类从文件系统中探寻出来,自动注册到S2Container中。 关于initMethod标签,请参照方法函数注入。 addClassPattern方法的第一个参数是想要注册的组件的包的名字。 子包的内容也会用回归的方式检索。 第二个参数是类的名字。 可以使用正则表达式。 也可以用“,”做分隔符指定复数个设定。 根据组件自动注册原则,即使后续追加组件的情况下,也没有必要追加设定,这样手续就大大地简化了。 如果组件的自动化注册可以了,接下来就会想让AOP的注册也自动化了吧。 刚才的GreetingImpl、GreetingClientImpl的AOP注册自动化的设定如下。 ... class="org.seasar.framework.container.autoregister.AspectAutoRegister"> 用interceptor属性指定AOP的名称。 addClassPattern方法同组件的自动化注册时的用法一样,这里就不做特殊的说明了。 组件自动化注册和AOP自动化注册的例子如下。 GreetingMain4.dicon xmlversion="1.0"encoding="UTF-8"? > DOCTYPEcomponentsPUBLIC"-//SEASAR//DTDS2Container2.3//EN"
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Seasar2