CDIで管理されるオブジェクトを得る

CDI管理のオブジェクトを得るには以下のようにします。

@Inject
private BeanManager       beanManager;

@SuppressWarnings("unchecked")
private <T> T getBean(final Class<T> pType) {
    final Set<Bean<?>> beans = this.beanManager.getBeans(pType);
    final Bean<? extends Object> bean = this.beanManager.resolve(beans);
    final CreationalContext<?> cc = this.beanManager.createCreationalContext(bean);
    final Object ret = this.beanManager.getReference(bean, pType, cc);
    return (T) ret;
}

こちら↓のサイトを参考にさせていただきました。
http://soras.sblo.jp/article/35292434.html

キャストが必要なのが残念ですが、これでいけるようです。

BeanManager#getBeans()の戻り値はなぜコレクションか

ちょっと不思議に感じますが、
Javadocなんかを読むと「CDIでは同じ型のオブジェクトが複数管理されることがあるから」じゃないか、と思えてきました。

だから上のコードは状況によっては使えないかもしれません。要検証。

CDI管理のオブジェクトを取り出せるようになると、いろんなことが出来るようになりますね。
なんかオレオレフレームワークを作ってみたくなってきました。