PicoとNanoの関係

PicoContainerIoCコンテナとしてのインターフェイスとデフォルトの実装を提供しています。PicoContainerのみで使用する場合、コンポーネントの登録はJavaコードとして記述しなければなりません。SpringのようなXMLベースの定義ファイルは用意されていないのです。NanoContainerはPicoContainerの別の実装を提供してくれます。具体的には外部ファイルによるコンポーネントの登録をサポートする実装があります。

XMLベースはSpringに割と近い形式で、setterベースもサポートするようです。
おもしろいのがJavaScriptベースとJythonベースです。コンポーネントの登録処理をJavaScriptなどでかけるようにしようというもの。これが使いやすかどうかは、試してみないとわかりませんが、おもしろアプローチだと思います。
NanoContainerはHPのダウンロードページからはダウンロードできませんでした。。。今のところ自分でビルドするしかないようです。

JavaScript(Rhino)によるコンポーネントの登録

var parentContainer = new PicoScriptable();
with (parentContainer) {
  var pc = new Packages.org.picoextras.testmodel.WebServerConfigBean();
  pc.setHost('foobar.com');
  pc.setPort(4321);
  registerComponentInstance(pc);
  registerComponentImplementation('org.picoextras.testmodel.WebServer',' XmlCompositionNanoContainerTestCase.OverriddenWebServerImpl.class.getName() + "');
}
pico.setPicoScriptable(parentContainer);