Большинство статей/туториалов по Spring Framework заостряют внимание на использовнии его в web приложении, и многие даже не задумываются что можно его использовать по иному. Я несколько раз сталкивался с удивлением других разработчиков, когда они слышали от меня что спринг прекрасно работает в большинстве других случаев, и знаю что иногда его отвергали, несмотря на все его удобства, считая что он не походит для разработки, к примеру, десктопного приложения.
На самом деле контекст приложения очень просто подключается к любому приложению, к примеру через класс FileSystemXmlApplicationContext. При этом всю структуру можно описать в Spring, а далее написать загрузчик типа такого:

public final class Boot {

    public static void main(String[] args) throws Exception {
        ApplicationContext ctx = new FileSystemXmlApplicationContext("config/main.xml");
        App app = (App) ctx.getBean("main.app");
        app.run();
    }
}

где App это класс приложения (не важно какого, десктоп или просто консоль), который описан бином main.app"" в контексте config/main.xml, и у него есть метод run запускающий это приложение.

8 Комментариев на “Spring в «не Web» приложениях”

  1. allnightlong сказал:

    Спасибо за наводку.

    Как раз недавно надо было написать приложение которое с бд работает. Но заломало разбираться, как сделать получить контекст,поэтому тупо сделал модулем в имевшемся веб приложении%)

  2. afimov сказал:

    Я думаю, опасения, что спринг не работает на десктопе связан с его монтруозностью. На десктопы предпочитают брать легкие контейнеры типа Pico.

  3. igor сказал:

    Чесно говоря не заметил монструозности в Спринге :)

    2.5 метра весит jar, может и многовато, а сколько pico? можно конечно вырезать лишнее, если не лень.

    На производительность он наврядли повлияет, разве вот только на время старта, пока будет парсить эти xml и пр., но имхо тоже настолько незначительно время, что на него можно не обращать внимания.

    Или есть еще чтото?

  4. xeye сказал:

    пико — 110кб

    спринг есть смысл юзать в стандалон, если он него нужно что-то «неспринговое» 8) в смысле, расширения типа AOP, транзакций и прочей хрени, которая собсно к контейнеру не имеет отношения.

    пико замечателен своей гибкостью и отсутствием мерзких XML конфигов. вернее, если ты жить не можешь без XML — то пожалуйста, там можно хоть из яваскрипта генерить контекст. но из явы это куда удобнее — рефакторишь и не паришься.

  5. Nuru сказал:

    Подобный способ использования описывался в книге Spring in Action

  6. павел сказал:

    А как можно Spring-ом собирать цепочки EJB, чтобы присутствовали локальные и remote EJB?

  7. igor сказал:

    Про ejb не подскажу, использовал spring лишь как замену ejb.

  8. igor сказал:

    2xeye: посмотрел, кстати, отдельные jar'ы спринга, core + context занимают суммарно в районе 300к. Если дело в размере то вот, вполне себе немного получается :)

Оставьте свое мнение

XHTML: Вы можете использовать следующие html теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> Если в комментарии пишете XML то вместо "<" используйте "&lt;"

Благодарности, комментарии не по теме и пр. спам ссылками удаляется, к тому же автоматически, можете не стараться.