カスタムCDIスコープを作成していて、BeanManager
を使用してNavigationHandler
カスタムクラスの注入を取得しています。しかし、それが返す豆はかなり奇妙です。BeanManagerは常に同じ参照を返します
だから私はBeanManagerをそのように使用します。
public class ScreenContext implements Context
{
private NavigationHandler getNavigationHandler()
{
final Set<Bean<?>> beans = m_beanManager.getBeans(NavigationHandler.class);
final Bean<?> bean = m_beanManager.resolve(beans);
NavigationHandler reference =
(NavigationHandler) m_beanManager.getReference(bean, NavigationHandler.class,
m_beanManager.createCreationalContext(bean));
System.out.println("Found "+reference+" (hash="+reference.hashCode()+")");
return reference;
}
...
}
私はそのように定義されている2つの異なるNavigationHandler
を取得するには、二つの異なるブラウザを使用して、私のプロジェクトを使用する場合、私は、期待:
@Named
@WindowScoped
public class NavigationHandler
implements Serializable, INavigationHandlerController
しかし、reference1==reference2
をテストすると、デバッガはtrue
を返します。また、私は奇妙なハッシュコードを取得する:
Found [email protected] (hash=1261587818)
Found [email protected] (hash=1261587818)
のtoString()で使用されるハッシュが異なっている理由を私は理解していない
が、ハッシュコードで使用されるハッシュは、()と同じです。