根据自动绑定的原理,DI的设定几乎可以做近乎全部的自动化。 使用备注码就有可能进行更加细致的设定。 更进一步、对组件的注册也进行自动化的话,就可以称为组件的自动注册机能了。
是从文件系统中将类检索出来对组件进行自动注册的组件。
属性 |
说明 |
instanceDef |
在自动注册的组件中指定适用的InstanceDef。用XML指定的场合下,
@org.seasar.framework.container.deployer.InstanceDefFactory@REQUEST
这样来指定。 |
autoBindingDef |
在自动注册的组件中指定适用的AutoBindingDef。用XML指定的场合下,
@org.seasar.framework.container.assembler.AutoBindingDefFactory@NONE
这样来指定。 |
autoNaming |
可以根据类名来自动决定组件名的组件。需要实装
org.seasar.framework.container.autoregister.AutoNaming
interface。默认状态下,使用
org.seasar.framework.container.autoregister.DefaultAutoNaming类的实例。 |
方法 |
说明 |
addClassPattern |
将想要自动注册的类模式注册。最开始的一个参数是组件所在包的名字。子包也能被以回归的方式进行检索。第二个参数是类的名字。可以使用正则表达式。也可以用“,”分隔做复数个设定。 |
addIgnoreClassPattern |
将不想自动注册的类模式注册。最开始的一个参数是组件所在包的名字。子包也能被以回归的方式进行检索。第二个参数是类的名字。可以使用正则表达式。也可以用“,”分隔做复数个设定。 |
从Jar文件中检索类自动注册组件的组件。
属性 |
说明 |
jarFileNames |
指定设定对象的jar文件名。可以使用正则表达式。但是能包含后缀。指定复数个对象的场合下,用“,”做分割符。例如,myapp.*, yourapp.*这样。 |
referenceClass |
用这个属性指定的类所属的jar文件的父路径为基础路径(例如,WEB-INF/lib)。默认的是org.aopalliance.intercept.MethodInterceptor.class。 |
instanceDef |
适用于自动注册的组件的InstanceDef的指定。在XML中如下,
@org.seasar.framework.container.deployer.InstanceDefFactory@REQUEST
这样指定。 |
autoBindingDef |
适用于自动注册的组件的AutoBindingDef的指定。在XML中如下,
@org.seasar.framework.container.assembler.AutoBindingDefFactory@NONE
这样指定。 |
autoNaming |
根据类名自动决定组件的名称的组件。需要对
org.seasar.framework.container.autoregister.AutoNaming interface
进行实装。默认的情况下是
org.seasar.framework.container.autoregister.DefaultAutoNaming类的实例。 |
方法 |
说明 |
addClassPattern |
将想要自动注册的类模式注册。最开始的一个参数是组件所在包的名字。子包也能被以回归的方式进行检索。第二个参数是类的名字。可以使用正则表达式。也可以用“,”分隔做复数个设定。 |
addIgnoreClassPattern |
将不想自动注册的类模式注册。最开始的一个参数是组件所在包的名字。子包也能被以回归的方式进行检索。第二个参数是类的名字。可以使用正则表达式。也可以用“,”分隔做复数个设定。 |
将类从文件系统或者Jar文件中检索出来并将组件自动注册的组件。
属性 |
说明 |
instanceDef |
适用于自动注册的组件的InstanceDef的指定。在XML中如下,@org.seasar.framework.container.deployer.InstanceDefFactory@REQUEST这样指定。 |
autoBindingDef |
适用于自动注册的组件的AutoBindingDef的指定。在XML中如下,
@org.seasar.framework.container.assembler.AutoBindingDefFactory@NONE
这样指定。 |
autoNaming |
从类的名称来自动决定组件的名称的组件。需要对
org.seasar.framework.container.autoregister.AutoNaming instance进行实装。默认的是
org.seasar.framework.container.autoregister.DefaultAutoNaming类的实例。 |
方法 |
说明 |
addReferenceClass |
以这个方法所指定的类所存在的路径或者Jar文件为基点对类进行检索。 |
addClassPattern |
将想要自动注册的类模式注册。最开始的一个参数是组件所在包的名字。子包也能被以回归的方式进行检索。第二个参数是类的名字。可以使用正则表达式。也可以用“,”分隔做复数个设定。 |
addIgnoreClassPattern |
将不想 自动注册的类模式注册。最开始的一个参数是组件所在包的名字。子包也能被以回归的方式进行检索。第二个参数是类的名字。可以使用正则表达式。也可以用“,”分隔做复数个设定。 |
AutoNaming
根据AutoNaming来控制组件名称。
从类的完整合法名称中将类的包的那部分名称去掉,如果结尾是Impl或者Bean也要去掉,之后将开头的字母变成小写做为组件名称来设定。 例如,aaa.HogeImpl类的情况下,组件的名称就成了hoge。
属性 |
说明 |
decapitalize |
组件名的开头字母为小写的情况下指定为true。默认值是true。 |
方法 |
说明 |
setCustomizedName |
不依从于默认的规则对类进行注册。第一个参数是类的完整合法名。第二个参数是组件的名称。 |
addIgnoreClassSuffix |
指定从类名的尾端消除的部分。注册默认值为Impl以及Bean。 |
addReplaceRule |
根据正则表达式追加替换规则。第一个参数为正则表达式。第二个参数为向要替换的字符串。 |
clearReplaceRule |
用setCustomizedName、addIgnoreClassSuffix、addReplaceRule将注册的变换规则清零。作为默认值被注册的Impl和Bean也被清零。 |
将包的名字或者是一部分类的合法名做为组件名称的设定。从类的完整合法名的最后把Impl或者Bean去掉,开头字母小写,分隔点后紧接着的字母变成大写并取掉分隔点,将这个新的单词设定为组件的名称。
可以将包的开头的不要的部分做消除指定。
例如,aaa.bbb.ccc.ddd.HogeImpl类的情况下,将开头的aaa.bbb做消除指定的情况下组件的名称为,cccDddHogeになります。
属性 |
说明 |
decapitalize |
组件名的开头字母为小写的情况下指定为true。默认值是true。 |
方法 |
说明 |
setCustomizedName |
遵从默认的规则来注册类。第一个参数是类的完整合法名。 第二个参数是组件的名称。 |
addIgnorePackagePrefix |
从包名称的开头开始指定消除的部分。 |
addIgnoreClassSuffix |
类名称的最末尾开始指定消除的部分。默认地将Impl和Bean注册。 |
addReplaceRule |
根据正则表达式追加替换规则。第一个参数为正则表达式。第二个参数是替换的新字符串。 |
clearReplaceRule |
将setCustomizedName、 addIgnorePackagePrefix、 addIgnoreClassSuffix、 addReplaceRule注册的替换规则清除。默认注册的Impl以及Bean也将被清除。 |
例
<component
class="org.seasar.framework.container.autoregister.FileSystemComponentAutoRegister">
<property name="autoNaming">
<component class="org.seasar.framework.container.autoregister.DefaultAutoNaming">
<initMethod name="setCustomizedName">
<arg>"examples.di.impl.HogeImpl"</arg>
<arg>"hoge2"</arg>
</initMethod>
</component>
</property>
<initMethod name="addClassPattern">
<arg>"examples.di.impl"</arg>
<arg>".*Impl"</arg>
</initMethod>
</component>
<component class="org.seasar.framework.container.autoregister.JarComponentAutoRegister">
<property name="referenceClass">
@junit.framework.TestSuite@class
</property>
<property name="jarFileNames">"junit.*"</property>
<initMethod name="addClassPattern">
<arg>"junit.framework"</arg>
<arg>"TestSuite"</arg>
</initMethod>
</component>
<component class="org.seasar.framework.container.autoregister.ComponentAutoRegister">
<initMethod name="addReferenceClass">
<arg>@aaa.bbb.ccc.ddd.HogeImpl@class</arg>
</initMethod>
<initMethod name="addClassPattern">
<arg>"aaa.bbb"</arg>
<arg>".*Impl"</arg>
</initMethod>
</component>
根据组件的自动注册规则,组件的注册可以做到自动化。进一步,AOP的注册也可以做到自动化,这就是AOP的自动注册机能。
和组件的自动注册功能组和使用的场合下,必须在组件的自动注册设定之后,作AOP的自动注册的设定。对于适用于使用AOP的组件的记述,必须在AOP的自动注册设定之后进行。
<components>
<!-- 1.组件的自动注册 -->
<component class="org.seasar.framework.container.autoregister.ComponentAutoRegister">
...
</component>
<!-- 2.AOP的自动注册 -->
<component class="org.seasar.framework.container.autoregister.AspectAutoRegister">
...
</component>
<!-- 3.其它的组件 -->
<component class="...">
...
</component>
...
<components>
org.seasar.framework.container.autoregister.AspectAutoRegister
通过指定类名的模式来进行AOP的自动注册的组件。
属性 |
说明 |
interceptor |
指定interceptor。想要指定复数个interceptor的场合下,请使用InterceptorChain。 |
pointcut |
适于使用interceptor的方法用逗号分隔开进行指定。不指定pointcut的情况下,实装组件的interface的所有方法都做为interceptor的对象。对于方法名称也可以使用正则表达式(JDK1.4のregex)来指定。 |
方法 |
说明 |
addClassPattern |
将想要自动注册的类的模式注册。第一个参数是组件的包的名。子包也可以用回归的方法检索。第二个参数是类名。可以使用正则表达式。用“,”分隔可以做复数个记述。 |
addIgnoreClassPattern |
将不想自动注册的类模式注册。第一个参数是组件的包的名。子包也可以用回归的方法检索。第二个参数是类名。可以使用正则表达式。用“,”分隔可以做复数个记述。 |
例
<include path="aop.dicon"/>
...
<component class="org.seasar.framework.container.autoregister.AspectAutoRegister"> <property name="interceptor">aop.traceInterceptor</property> <initMethod name="addClassPattern"> <arg>"examples.di.impl"</arg> <arg>".*Impl"</arg> </initMethod> </component>
针对某个interface的实装类进行AOP的自动注册的组件。
属性 |
说明 |
interceptor |
指定interceptor。想要指定复数个interceptor的场合下,请使用InterceptorChain。 |
targetInterface |
针对某一指定的interface的实装组件,使用AOP。 |
例
<include path="aop.dicon"/>
...
<component class="org.seasar.framework.container.autoregister.InterfaceAspectAutoRegister"> <property name="interceptor">aop.traceInterceptor</property>
<property name="targetInterface">@examples.Greeing@class</property> </component>
|