Получение экземпляра в модуле Guice

У меня есть этот класс:

public class CompositeSecurityAuthorizer implements SecurityAuthorizer {
    @inject @CompositeSecurityAuthorizerAnnot
    List authorizers; //Field Injection
}

Я хочу ввести в поле авторизаторов значение List .

В моем модуле, У меня есть следующее:

@Override
protected void configure() {
  bind(CompositeSecurityAuthorizer.class).in(Singleton.class);
  bind(StoreAuthorizer.class).in(Singleton.class);
  bind(SecurityAuthorizer.class)
      .annotatedWith(CompositeSecurityAuthorizerAnnot.class)
      .to(CompositeSecurityAuthorizer.class);
}

@Provides @CompositeSecurityAuthorizerAnnot
List provideAuthorizersList()
{
    List authList = new ArrayList();
    //How do I add StoreAuthorizer while maintaining a Singleton?
    //Will the line below do it through Guice magic?
    //authList.add(new StoreAuthorizer());
    return authList;
}

Мой вопрос встроен в комментарии к коду. Когда я добавляю StoreAuthorizer в этот список :

  • Как мне убедиться, что это тот же экземпляр, что и другие ссылки StoreAuthorizer ?
  • Это то, что Guice просто скрывает под капотом? - Получить координаты. - context.lineTo () ...

    Я написал небольшой сценарий рисования (холст) для этого веб-сайта: http://scri.ch/

    Когда вы нажимаете на документ, каждые Событие mousemove в основном выполняет следующее:
    - Получить координаты.
    - context.lineTo () между этой точкой и предыдущей
    - context.stroke () строка

    Как видите, если вы перемещаете курсор очень быстро, событие запускается недостаточно (в зависимости от вашего процессора / браузера / и т. Д.), И проводится прямая линия.

    В псевдокоде:

    window.addEventListener('mousemove', function(e){
      myContext.lineTo(e.pageX, e.pageY);
      myContext.stroke();
    }, false);
    

    Это известная проблема, и решение хорошее, но я хотел бы ее оптимизировать.

    Итак, вместо stroke () каждый раз, когда запускается событие mousemove, я помещаю новые координаты в очередь массива и регулярно рисую / очищаю ее с помощью таймера.

    В псевдокоде:

    var coordsQueue = [];
    
    window.addEventListener('mousemove', function(e){
      coordsQueue.push([e.pageX, e.pageY]);
    }, false);
    
    function drawLoop(){
      window.setTimeout(function(){
        var coords;
        while (coords = coordsQueue.shift()) {
          myContext.lineTo(coords[0], coords[1]);
        }
        myContext.stroke();
        drawLoop();
      }, 1000); // For testing purposes
    }
    

    Но это не улучшило строку. Поэтому я попытался нарисовать точку только на mousemove . Тот же результат: слишком много места между точками.

    Это заставило меня понять, что первый блок кода достаточно эффективен, это просто событие mousemove , которое запускается слишком медленно.

    Итак, после того, как я потратил некоторое время на реализацию бесполезной оптимизации, ваша очередь: есть ли способ оптимизировать скорость срабатывания mousemove в сценариях DOM?

    Можно ли «запросить» положение мыши в в любое время?

    Спасибо за советы!

15
задан bpierre 30 March 2015 в 13:31
поделиться