Я создаю пользовательскую область 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;
}
...
}
я ожидаю, когда я использую мой проект с использованием двух различных браузеров, чтобы получить два различных NavigationHandler
, которые определяются таким образом:
@Named
@WindowScoped
public class NavigationHandler
implements Serializable, INavigationHandlerController
Но мой отладчик возвращает true
, когда я тестирую reference1==reference2
. Я также получаю странные хэш-коды:
Found [email protected] (hash=1261587818)
Found [email protected] (hash=1261587818)
Я не понимаю, почему хэшей, используемые в ToString() различны, но хэш используется в хэш-код() одинаковы.