根據(jù)自動綁定的原理,DI的設(shè)定幾乎可以做近乎全部的自動化。 使用備注碼就有可能進(jìn)行更加細(xì)致的設(shè)定。 更進(jìn)一步、對組件的注冊也進(jìn)行自動化的話,就可以稱為組件的自動注冊機能了。
是從文件系統(tǒng)中將類檢索出來對組件進(jìn)行自動注冊的組件。
屬性 |
說明 |
instanceDef |
在自動注冊的組件中指定適用的InstanceDef。用XML指定的場合下,
@org.seasar.framework.container.deployer.InstanceDefFactory@REQUEST
這樣來指定。 |
autoBindingDef |
在自動注冊的組件中指定適用的AutoBindingDef。用XML指定的場合下,
@org.seasar.framework.container.assembler.AutoBindingDefFactory@NONE
這樣來指定。 |
autoNaming |
可以根據(jù)類名來自動決定組件名的組件。需要實裝
org.seasar.framework.container.autoregister.AutoNaming
interface。默認(rèn)狀態(tài)下,使用
org.seasar.framework.container.autoregister.DefaultAutoNaming類的實例。 |
方法 |
說明 |
addClassPattern |
將想要自動注冊的類模式注冊。最開始的一個參數(shù)是組件所在包的名字。子包也能被以回歸的方式進(jìn)行檢索。第二個參數(shù)是類的名字??梢允褂谜齽t表達(dá)式。也可以用“,”分隔做復(fù)數(shù)個設(shè)定。 |
addIgnoreClassPattern |
將不想自動注冊的類模式注冊。最開始的一個參數(shù)是組件所在包的名字。子包也能被以回歸的方式進(jìn)行檢索。第二個參數(shù)是類的名字??梢允褂谜齽t表達(dá)式。也可以用“,”分隔做復(fù)數(shù)個設(shè)定。 |
從Jar文件中檢索類自動注冊組件的組件。
屬性 |
說明 |
jarFileNames |
指定設(shè)定對象的jar文件名??梢允褂谜齽t表達(dá)式。但是能包含后綴。指定復(fù)數(shù)個對象的場合下,用“,”做分割符。例如,myapp.*, yourapp.*這樣。 |
referenceClass |
用這個屬性指定的類所屬的jar文件的父路徑為基礎(chǔ)路徑(例如,WEB-INF/lib)。默認(rèn)的是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 |
根據(jù)類名自動決定組件的名稱的組件。需要對
org.seasar.framework.container.autoregister.AutoNaming interface
進(jìn)行實裝。默認(rèn)的情況下是
org.seasar.framework.container.autoregister.DefaultAutoNaming類的實例。 |
方法 |
說明 |
addClassPattern |
將想要自動注冊的類模式注冊。最開始的一個參數(shù)是組件所在包的名字。子包也能被以回歸的方式進(jìn)行檢索。第二個參數(shù)是類的名字??梢允褂谜齽t表達(dá)式。也可以用“,”分隔做復(fù)數(shù)個設(shè)定。 |
addIgnoreClassPattern |
將不想自動注冊的類模式注冊。最開始的一個參數(shù)是組件所在包的名字。子包也能被以回歸的方式進(jìn)行檢索。第二個參數(shù)是類的名字??梢允褂谜齽t表達(dá)式。也可以用“,”分隔做復(fù)數(shù)個設(shè)定。 |
將類從文件系統(tǒng)或者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進(jìn)行實裝。默認(rèn)的是
org.seasar.framework.container.autoregister.DefaultAutoNaming類的實例。 |
方法 |
說明 |
addReferenceClass |
以這個方法所指定的類所存在的路徑或者Jar文件為基點對類進(jìn)行檢索。 |
addClassPattern |
將想要自動注冊的類模式注冊。最開始的一個參數(shù)是組件所在包的名字。子包也能被以回歸的方式進(jìn)行檢索。第二個參數(shù)是類的名字??梢允褂谜齽t表達(dá)式。也可以用“,”分隔做復(fù)數(shù)個設(shè)定。 |
addIgnoreClassPattern |
將不想 自動注冊的類模式注冊。最開始的一個參數(shù)是組件所在包的名字。子包也能被以回歸的方式進(jìn)行檢索。第二個參數(shù)是類的名字??梢允褂谜齽t表達(dá)式。也可以用“,”分隔做復(fù)數(shù)個設(shè)定。 |
AutoNaming
根據(jù)AutoNaming來控制組件名稱。
從類的完整合法名稱中將類的包的那部分名稱去掉,如果結(jié)尾是Impl或者Bean也要去掉,之后將開頭的字母變成小寫做為組件名稱來設(shè)定。 例如,aaa.HogeImpl類的情況下,組件的名稱就成了hoge。
屬性 |
說明 |
decapitalize |
組件名的開頭字母為小寫的情況下指定為true。默認(rèn)值是true。 |
方法 |
說明 |
setCustomizedName |
不依從于默認(rèn)的規(guī)則對類進(jìn)行注冊。第一個參數(shù)是類的完整合法名。第二個參數(shù)是組件的名稱。 |
addIgnoreClassSuffix |
指定從類名的尾端消除的部分。注冊默認(rèn)值為Impl以及Bean。 |
addReplaceRule |
根據(jù)正則表達(dá)式追加替換規(guī)則。第一個參數(shù)為正則表達(dá)式。第二個參數(shù)為向要替換的字符串。 |
clearReplaceRule |
用setCustomizedName、addIgnoreClassSuffix、addReplaceRule將注冊的變換規(guī)則清零。作為默認(rèn)值被注冊的Impl和Bean也被清零。 |
將包的名字或者是一部分類的合法名做為組件名稱的設(shè)定。從類的完整合法名的最后把Impl或者Bean去掉,開頭字母小寫,分隔點后緊接著的字母變成大寫并取掉分隔點,將這個新的單詞設(shè)定為組件的名稱。
可以將包的開頭的不要的部分做消除指定。
例如,aaa.bbb.ccc.ddd.HogeImpl類的情況下,將開頭的aaa.bbb做消除指定的情況下組件的名稱為,cccDddHogeになります。
屬性 |
說明 |
decapitalize |
組件名的開頭字母為小寫的情況下指定為true。默認(rèn)值是true。 |
方法 |
說明 |
setCustomizedName |
遵從默認(rèn)的規(guī)則來注冊類。第一個參數(shù)是類的完整合法名。 第二個參數(shù)是組件的名稱。 |
addIgnorePackagePrefix |
從包名稱的開頭開始指定消除的部分。 |
addIgnoreClassSuffix |
類名稱的最末尾開始指定消除的部分。默認(rèn)地將Impl和Bean注冊。 |
addReplaceRule |
根據(jù)正則表達(dá)式追加替換規(guī)則。第一個參數(shù)為正則表達(dá)式。第二個參數(shù)是替換的新字符串。 |
clearReplaceRule |
將setCustomizedName、 addIgnorePackagePrefix、 addIgnoreClassSuffix、 addReplaceRule注冊的替換規(guī)則清除。默認(rèn)注冊的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>
根據(jù)組件的自動注冊規(guī)則,組件的注冊可以做到自動化。進(jìn)一步,AOP的注冊也可以做到自動化,這就是AOP的自動注冊機能。
和組件的自動注冊功能組和使用的場合下,必須在組件的自動注冊設(shè)定之后,作AOP的自動注冊的設(shè)定。對于適用于使用AOP的組件的記述,必須在AOP的自動注冊設(shè)定之后進(jìn)行。
<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
通過指定類名的模式來進(jìn)行AOP的自動注冊的組件。
屬性 |
說明 |
interceptor |
指定interceptor。想要指定復(fù)數(shù)個interceptor的場合下,請使用InterceptorChain。 |
pointcut |
適于使用interceptor的方法用逗號分隔開進(jìn)行指定。不指定pointcut的情況下,實裝組件的interface的所有方法都做為interceptor的對象。對于方法名稱也可以使用正則表達(dá)式(JDK1.4のregex)來指定。 |
方法 |
說明 |
addClassPattern |
將想要自動注冊的類的模式注冊。第一個參數(shù)是組件的包的名。子包也可以用回歸的方法檢索。第二個參數(shù)是類名??梢允褂谜齽t表達(dá)式。用“,”分隔可以做復(fù)數(shù)個記述。 |
addIgnoreClassPattern |
將不想自動注冊的類模式注冊。第一個參數(shù)是組件的包的名。子包也可以用回歸的方法檢索。第二個參數(shù)是類名??梢允褂谜齽t表達(dá)式。用“,”分隔可以做復(fù)數(shù)個記述。 |
例
<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的實裝類進(jìn)行AOP的自動注冊的組件。
屬性 |
說明 |
interceptor |
指定interceptor。想要指定復(fù)數(shù)個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>
|