Использование конфигурации проектов в Java классах, взамен XML?

264
12 апреля 2017, 12:57

Ну вот например:

@Configuration
@ImportResource("classpath:META-INF/ann-config.xml")
@ComponentScan(basePackageClasses = {MyController.class})
public class Initializer implements WebApplicationInitializer {
public void onStartup(ServletContext servletContext) throws ServletException {
        AnnotationConfigWebApplicationContext ctx = new 
            AnnotationConfigWebApplicationContext();
        ctx.register(WebConfig.class);
        ctx.setConfigLocation("classpath:META-INF/ann-config.xml");
        servletContext.addListener(new ContextLoaderListener(ctx));
        ctx.setServletContext(servletContext);
        ServletRegistration.Dynamic servlet = 
            servletContext.addServlet("dispather", new DispatcherServlet(ctx));
        servlet.addMapping("/");
        servlet.setLoadOnStartup(1);
    }
}

Собственно вопрос: В чем слабые стороны такого подхода по сравнению с XML конфигурацией? Что натолкнуло на поднятия темы? В одной компании, один из специалистов в авторитетной должности архитектора, намекнул что это считается плохим тоном. На вопрос Кем считается? ответ Java-сообществом. Что скажете?

Answer 1

Есть такой термин "hard code" (хардкод по нашему). Мало кто будет утверждать, что это не плохо (есть варианты, когда оно нужно, но это достаточно редкие случаи).

Вот объединение конфигурации и кода - это оно и есть.

Давай рассмотрим самое очевидное - необходимость перекомпиляции после внесения изменений в конфигурацию. Потянем за ниточку, поразматываем клубок:

  1. Вдруг оказалось, что для разных заказчиков нужна чуть разная конфигурация
  2. Понадобилось срочно подкрутить мелочь какую-то, а разработчик в отпуске
  3. Junior, которого попросили внести изменение из пункта 2 не знал, что где-то сбоку был захардкожен еще кусок конфигурации, который тоже надо было поменять, чтобы все не рухнуло. А там деплой с даунтаймами.
  4. Девелоперская ветка далеко уехала от продакшена. Прям совсем далеко. И вдруг потребовалось чуток изменить конфигурацию в боевой среде. "Ээээ... А что, у нас оно не в гите разве, а в старом SVN лежало?"

и т.д.

Answer 2

Самый главный недостаток в сравнении с xml - необходимость повторной компиляции при изменении конфигурации. А в остальном - вопрос личных предпочтений. Я люблю сочетание из аннотаций и xml.

READ ALSO
Все случаи когда может выскочить InterruptedException?

Все случаи когда может выскочить InterruptedException?

Существует ограниченное количество случаев когда может выскочить InterruptedExceptionПонятно что это может произойти при вызове wait() или sleep(), они...

266
Как работать с drawBitmapMesh?

Как работать с drawBitmapMesh?

Саму ее я приблизительно разобрался как сделать

277
Динамическое создание объектов в Spring

Динамическое создание объектов в Spring

Только осваиваюсь в SpringПодскажите, как реализовать следующее: Есть основная панель:

326