Seasar2(S2.4.0-rc-1)を拾って来て、遊ぼうと思ったんですが。めんどくさいからEmacsでpackage指定なしのサンプルコードをちょちょちょいっと書いたんですが、FileSystemComponentAutoRegisterはカレントディレクトリ以下のクラスを検索するって荒業には対応してないみたいですね。ダイコンに、
<initMethod name="addClassPattern"> <arg>""</arg> <arg>".*Impl"</arg> </initMethod>
と書いてカレントディレクトリにあるデフォルトパッケージを検索させようとすると、*.classファイルの検索まではうまくいくみたいですが、クラスのregist時にClassNotFoundExceptionを投げてきます。クラス名にパッケージ名をつけるときに使っているClassUtil#concatNameが空文字列に対応しておらず、空文字も'.'で接続してしまっているのが原因ですかね?*1。
たとえば、カレントにMyTestImpl.classがあると、最終的にClass#forNameで探されるクラスは".MyTestImpl"と先頭に余分なドットがくっついちゃってまずーな感じになりそうです。
一方、
<initMethod name="addClassPattern"> <arg></arg> <arg>".*Impl"</arg> </initMethod>
と記述すると、パッケージ名に対してstartWith()を呼ぶ箇所*2があるのでぬるぽ。これ以外の指定方法はちょっと思いつきませんでした。
まあ、あくまでも荒業だからできなくても誰も困らないんでしょうけど(笑)。
ところで、
<property name="autoNaming"> <component class="org.seasar.framework.container.autoregister.DefaultAutoNaming"/> </property>
って省略できなかったんでしたっけ? これないとエラーになってしまいました。