我正在創建自定義CDI範圍,並使用BeanManager
來註冊我的NavigationHandler
自定義類。但它返回的bean很奇怪。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;
}
...
}
我希望,當我使用使用兩個不同的瀏覽器我的項目,得到兩個不同的NavigationHandler
,其定義的方式:
@Named
@WindowScoped
public class NavigationHandler
implements Serializable, INavigationHandlerController
但我的調試器在測試reference1==reference2
時返回true
。我也得到奇怪的散列碼:
Found [email protected] (hash=1261587818)
Found [email protected] (hash=1261587818)
我不明白爲什麼在了toString()使用的哈希值是不同的,但()中使用的hashCode哈希是相同的。