【发布时间】:2017-07-04 13:12:00
【问题描述】:
我正在创建一个自定义 CDI 范围并使用 BeanManager 来注入我的 NavigationHandler 自定义类。但是它返回的 bean 很奇怪。
所以我就是这样使用 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 NavigationHandler@593e785f (hash=1261587818)
Found NavigationHandler@b6d51bd (hash=1261587818)
我不明白为什么 toString() 中使用的哈希值不同,但是 hashCode() 中使用的哈希值是一样的。
【问题讨论】:
标签: hash scope cdi custom-scope