[1.14-1.16] Spring Bootstrap

170
2
53
Так что про котлин?
Пару раз пытался разобрать, что к чему там. Язык не плохой, имеет место быть. Но я не могу тебе порекомендовать, ведь я лишь пытался разобраться, информации там настолько много, что для изучения всего необходимо потратить не времени, которого у меня не много. Если вопрос в том, стоит ли изучать? Стоит. Крупные плагины и моды используют его в своих проектах не просто так, да и знание дополнительного языка, будет только плюсом в твоем досье!
 
153
21
41
Пару раз пытался разобрать, что к чему там. Язык не плохой, имеет место быть. Но я не могу тебе порекомендовать, ведь я лишь пытался разобраться, информации там настолько много, что для изучения всего необходимо потратить не времени, которого у меня не много. Если вопрос в том, стоит ли изучать? Стоит. Крупные плагины и моды используют его в своих проектах не просто так, да и знание дополнительного языка, будет только плюсом в твоем досье!
Чем это лучше использования котлина? А тут еще переучиваться, в отличии от котлина, надо, поддерживать чужую структуру папок, наследоваться от чужик классов(запоминать тонну классов).
Ты немного не понял..
 
170
2
53
Ты немного не понял..
упс, извиняюсь. Но ответ вытекающий, я не могу его дать из-за недостатка знаний в котлине.
Скажу лишь то, что это ошибочное представление и на практике, все вовсе не так, а очень даже просто!
поддерживать чужую структуру папок. переучиваться надо. наследоваться от чужик классов. запоминать тонну классов.
 

GoogleTan

Картошка :3
1,354
43
310
Дело в том, что я пишу на котлине и пытаюсь понять даст ли это мне что-то. Object отлично отрабатывает как твои менеджеры.
 
170
2
53
На самом деле забавно получилось, сейчас перечитал все происходящее в теме и заметил, что ты не однократно спрашивала меня про kotlin, хотя в порыве "диалога", я вовсе не замечал этого вопроса. Вынужден попросить за это прощения.
даст ли это мне что-то
Быстро погуглив, я заметил, что у котлина пользуются некоторой популярностью аналогичные проекты с ioc | di, в виду чего могу сделать вывод что Да. Это даст тебе что-то.
Я в шапке сделал примеры обычной реализации и реализации со спринг, может ты покажешь мне такой же класс с реализацией котлина?
 

tox1cozZ

aka Agravaine
8,454
598
2,890
Я сам знаю Котлин поверхностно, но блин, он-то тут причем? @GoogleTan как можно сравнивать его со спрингом? Это вообще разные вещи. Все что есть в котлине - сахар для создания синглтонов, не? Это немного не то.

По поводу отзыва.
Спринг я начал изучать совсем недавно, успел написать на нем несколько небольших проектов, в скором времени планирую начать писать бэк для полноценного сайта.
Мне он сразу понравился, все очень удобно и реально быстрее разработка.
Например, Конфиги: делаешь класс с нужными полями, вешаешь аннотацию, эти поля мапятся в файл конфигурации. Быстро, просто, не надо писать дополнительного кода для загрузки данных из файла.
И таких примеров очень много.

Насчёт майна... Не знаю. С одной стороны - круто, если грамотно интегрировать спринг, получится реально удобно. С другой стороны - мне кажется это слишком оверхед. Достаточно сделать ручками все эти приколы с аннотациями, чтобы можно было легко зарегать шедулер, конфиг, всякие хендлеры и тд. Ну и какое-то внедрение зависимостей. Больше ничего и не надо.
 

mayakplay

SpringFlomaster
217
3
160
мне интересно почитать твой отзыв
Мне слишком лень ковырять свои исходники, чтобы выложить их тут. Ты поленился дальше раскопать контекст, явно

Когда я вижу такую конструкцию, мне сразу плохеет.
Java:
getContext().getBean(MyService.class).usefulWork();

Во-вторых, ты юзаешь джава конфиг в местах, где гораздо удобнее смотрится @ComponentScan, вопрос - зачем, риторический. Явно же, нужно рыть дальше.
За старания в изучении технологий, однозначно, хвалю!
 

mayakplay

SpringFlomaster
217
3
160
Я написал базовую заготовку для подключения контекста к моду, плюсом - регистрация обработчиков событий

"Мейн" класс мода. В данном случае, он будет являться спринговой конфигурацией, что позволяет не писать .getBean(...).
ModMain.java:
@ComponentScan
@Configuration
@Mod(modid = ModMain.MOD_ID)
public class ModMain {

    private static final String MOD_ID = "modid";

    @Mod.EventHandler
    public void createSpringContext(FMLInitializationEvent event) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.getBeanFactory().addBeanPostProcessor(getModConfigurationInjectionPostProcessor());
        context.registerBean(this.getClass());
        context.refresh();
    }

    /**
     * Если сделать ModMain конфигурацией, спринг попытается создать его инстанс, на что форж скинет эксепшон.
     * Для решения проблемы, в момент инициализации бина, мы отдадим уже существующий инстанс ModMain
     * в контекст, тем самым, сделав его бином, не противореча конвенциям форжа.
     */
    private BeanPostProcessor getModConfigurationInjectionPostProcessor() {
        return new InstantiationAwareBeanPostProcessorAdapter() {
            @Override
            public Object postProcessBeforeInstantiation(Class<?> beanClass, String beanName) throws BeansException {
                return ModMain.class.isAssignableFrom(beanClass) ?
                        ModMain.this : super.postProcessBeforeInstantiation(beanClass, beanName);
            }
        };
    }

}

Процессор, регистрирующий эвенты, при наличии родства с интерфейсом Listener. Можно было искать аннотацию эвентов форжа над методами, но мне лень заморачиваться, сделал легкий пример
EventRegistryBeanPostProcessor.java:
@Component
public class EventRegistryBeanPostProcessor implements BeanPostProcessor {

    @Override
    public Object postProcessBeforeInitialization(@NotNull Object bean, String beanName) throws BeansException {
        if (bean instanceof Listener) {
            MinecraftForge.EVENT_BUS.register(bean);
            FMLCommonHandler.instance().bus().register(bean);
        }

        return bean;
    }

}

Listener.java:
public interface Listener {
}
 
Последнее редактирование:

GoogleTan

Картошка :3
1,354
43
310
Ты можешь его куда-то заинжектить?
Чтоб не значили все твои операции, мне не очевидно почему их нельзя сделать с сингтонами. Я думаю я неправильно понимаю слово менеджер. В моей трактовке маенеджер - объект(чаще всего в единственном экземпляре) который что-то делает над чем то и хранит что-то. Вот под эту конструкцию так же идельно подходят синглтоны.
 

mayakplay

SpringFlomaster
217
3
160
Вот под эту конструкцию так же идельно подходят синглтоны
Синглтон - антипатерн. Я уверен, без помощи санитаров, ты не напишешь мне нормальный лейзи синглтон.
Очень забавно наблюдать за тем, какие консервативные - жители форума. Если бы все были такими, мы бы до сих пор камнями дрались

Коротко, о единственном, нормальном синглтоне:

1611667695522.png
 

GoogleTan

Картошка :3
1,354
43
310
Ну, это ты тогда консервативный, раз не можешь признать их пользу в некоторых ситуациях
 
7,099
324
1,509
Ты ведь начал изучать и использовать Spring, может тебе уже есть что сказать о проекте?
Только попробовал спринг вне моддинга. Для модов надо ревьювнуть несколько своих проектов ,у мя пока нет времени для этого. Поэтому напишу рецензию позже
 
7,099
324
1,509
7,099
324
1,509
вынуждает конечного пользователя изучать новый для него framework и искать ему применение
Фреймворки нужны для решения существующих проблем, а не для того, чтобы искать новые приключения на свою задницу. Если фреймворк не решает проблемы, стоящие перед тобой - то нет никакого смысла добавлять его в проект.
Адаптируя это к стрингу: если проекте овердофига сущностей зависят друг от друга по некоторой иерархии, но спринг улучшит процесс разработки, иначе его просто нельзя будет никак применить.
Поэтому объективная(и субъективная тоже) оценка полезности использования спринга в проекте мода зависит от того, как часто в моддинге бывает нужно делать зависимости одних сущностей от других
 
Сверху