Spring в «не Web» приложениях

Большинство статей/туториалов по 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 запускающий это приложение.

  • http:// allnightlong

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

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

  • http:// afimov

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

  • http:// igor

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

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

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

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

  • http:// xeye

    пико — 110кб

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

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

  • http:// Nuru

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

  • http:// павел

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

  • http:// igor

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

  • http:// igor

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