Перекрывающиеся области в Guice? - PullRequest
0 голосов
/ 13 июня 2018

Guice имеет концепцию Scope , обычно используемую для запроса веб-сервера.

Являются ли Scopes жизнеспособными для использования в долгоживущих объектах, жизненный цикл которых может быть асинхронным по сравнению стекущий код?

Например, Sponge и Bukkit предоставляют события, которые срабатывают, когда мир загружается / выгружается.

Эти миры затем ставятся и отмечаются различными событиями.

Стоит ли использовать аннотации Scopes и Scoping для того, чтобы иметь аннотацию, которая принимает параметр, для внедрения / инициализации сервисов / специфичных для мира слушателей всякий раз, когда мир загружается и выгружается?

public abstract class WorldService {
    World world;

    public WorldService(World world) {
        this.world = world;
    }

    abstract void tick();
    abstract void start();
    abstract void stop();

    public static class TimeTracker extends WorldService {
        private final Logger logger;
        private int count;

        @Inject
        public TimeTracker(World world, Logger logger) {
            super(world);
            this.logger = logger;
        }

        @Override
        void tick() {
            count++;
        }

        @Override
        void start() {
            count = 0;
        }

        @Override
        void stop() {
            logger.debug("World loaded for "+count+" ticks");
        }
    }
}

1 Ответ

0 голосов
/ 13 июня 2018

https://github.com/timboudreau/scopes Предоставляет библиотеку, которая позволяет определять ваши собственные области.

Если вы находитесь внутри ReentrantScope и отправляете Runnable в ExecutorService, обернутый этим методом, текущую областьсодержимое будет заморожено и воссоздано до запуска Runnable - таким образом, вы получите содержимое области, идентичное тому, которое было у вас при отправке Runnable.

Таким образом, можно получить все преимущества области видимости и получитьмодель сложной многопоточности.

Таким образом, вы можете не только иметь пользовательские области с этой библиотекой, но и успешно передавать объекты через запланированные задачи, потенциально в сочетании с цепочками задач Айкара!

Это позволяет получить очень аккуратный и аккуратный код.

...