У меня есть этот класс:
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
? Я написал небольшой сценарий рисования (холст) для этого веб-сайта: 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?
Можно ли «запросить» положение мыши в в любое время?
Спасибо за советы!