it-swarm-eu.dev

Proč ne jarní rámec?

Existují nějaké nevýhody při vázání mé žádosti na jarní rámec?

Nemluvím o chybách nebo podobných problémech, pokud existují. Mluvím o strategických, architektonických věcech, které ovlivní můj životní cyklus aplikace.

Mám raději jaro před Java EE základní funkce podporované kontejnerem EE? Jaké jsou výhody?

43

Protože ostatní příspěvky zde zmiňují vzhůru, zmíním se o negativních aspektech jara. I s těmito negativy je jaro všudypřítomná, spolehlivá a funguje tak, jak je inzerována.

Takže k negativům:

  • Enormous: Já bych nechtěl dát sklenice s 3000 třídami do mého malého hobby projektu.

  • Existuje několik popisů, které jsou pomalejší než některé jiné DI rámce jako Guice nebo Pico. neoficiální a pravděpodobně ne příliš důležité.

  • Práce s některými částmi jara může být frustrující, pokud nejsou dobře zdokumentované části jádra a dokumentace, kterou najdete v různých hlavních verzích.

Jako vedlejší účinek jeho velikosti, buďte připraveni strávit radostné hodiny kopáním hromádek tříd, které se sice logicky pojmenovávají, začnou se spojovat do obrovské hromady substantiv, když jste unavení („jistě, stačí připojit TransactionAwareConnectionFactoryProxy k vašemu UserCredentialsConnectionFactoryAdapter to .. zzzzzzzz "). Abychom byli spravedliví, skutečně jsou logicky pojmenováni, je to rozumná reakce na velikost rámce, ale přesto.

Možná díky této adaptaci nových kousků může být jaro alespoň pro mě pomalé. Ne tolik s jádrovou pružinou, ale existují konektory pro téměř všechno a nejsou zdaleka tak dobře zdokumentovány, jak by mohly být, a to je, když začnete brodit skrz podstatnou polévku. Opět platí, že je to všechno jen v reakci na jeho velikost.

42
Steve B.

Na jaro je jen velmi málo stran

Myslel jsem dlouho a tvrdě, abych našel nějaké závažné nevýhody používání Springa, a obávám se, že jsem selhal. Jaro je vynikající sada nástrojů u modelů JEE/OSGi. Poskytuje širokou škálu neinvazivních šablon, které výrazně zjednodušují práci s často těžkopádnými podpůrnými API poskytovanými aplikačními kontejnery.

Jaro vs jádro JEE

Jaro nenahrazuje základní technologie JEE - možná EJB, ale s novou specifikací EJB3 v něm není téměř nic - místo toho poskytuje šablony, které jim usnadní jejich používání. Zvažte JAX-RS jako RESTful API webových služeb. Jaro poskytuje RestTemplate, který se obvykle používá následujícím způsobem (předpokládejme, že je injektován):

SomeJaxbAnnotatedClass object = restTemplate.getForObject(someURI,SomeJaxbAnnotatedClass.class);

Tím přejdete k someURI získejte XML/JSON/YAML a zrušte jeho začlenění do zadaného objektu domény. Vše v jednom řádku kódu.

Výjimky a protokolování chyb jsou zpracovány jako výjimky za běhu, což usnadňuje udržování místního kódu v čistotě. Jaro dokonce pracuje na snížení vnějších závislostí, kdykoli je to možné, takže výše uvedený příklad používá pouze balíčky Java.net. *).

Existují šablony pro JMS, JAX-WS, JPA, JTA a dále. Všechny z nich usnadňují práci s těmito standardy a činí váš kód čistší a méně náchylný k chybám.

Pick'n'mix architektura

Z architektonického hlediska zdůrazňuje Spring lehký přístup pick'n'mix. Účinkem je umožnit systémovým architektům vyhnout se použití nafouklých kontejnerů aplikací pro všechny, jako je WebSphere, JBoss nebo Glassfish, a místo toho si vybrat své lehké protějšky - Jetty, Tomcat a tak dále.

Proč je toto důležité? Větší aplikační kontejnery mají mnohem delší aktualizační cyklus, který vyhovuje potřebám některých klientů více než ostatní. Banky nemusí být tak obratné jako spuštění jednoho člověka.

Pokud chcete využít nejnovější verzi podpůrných rámců, pravděpodobně je nenajdete ve velkých aplikačních kontejnerech. Místo toho je musíte zahrnout ručně a jaro to usnadňuje.

Také musíte zahrnout pouze technologie, které potřebujete. Aplikační kontejnery vám podaří JMS, EJB a všechny další zkratky pod sluncem, ale chcete jen lehkou perzistenci s JPA. Zahrňte Jaro a Hibernace a máte hotovo.

Tak proč ne jaro?

Vyhněte se jaro, pokud chcete jít s implementacemi knihoven specifických pro dodavatele. Vyhněte se také tomu, pokud chcete své konfigurační údaje ponechat ve svých třídách, než je externalizovat do XML nebo JNDI. A rozhodně se tomu vyhněte, pokud si myslíte, že bezplatná a open-source řešení nejsou vhodná pro vaše prostředí.

9
Gary Rowe

jedna zajímavá věc, kterou Martin Thompson zmiňuje v tento článek je, že jaro může mít netriviální dopad na časy GC:

Zásobníky hovorů udržujte přiměřeně malé. Ještě více práce zde. Pokud jste natolik blázniví, že používáte jaro, podívejte se na hromádky hovorů, abyste viděli, co tím myslím! Sběratel odpadků je musí procházet hledáním dosažitelných předmětů. -Martin Thompson

Tato věc nebude velkým problémem pro většinu aplikací, ale je to velmi reálný problém pro ty aplikace, na které Martin odkazuje.

5
Paul Sanwald

Jaro je opravdu dobré. Spring Core je v pořádku. K ostatním bodům bych přidal další, pokud jste v kategorii výklenků, kde výkon je opravdu problém, budete se chtít vyhnout dalším jarním modulům, pouze pokud jste v rukou špičkových vývojářů. Jedná se pouze o problém, pokud používáte systém, ve kterém je výkon skutečně kritický. V rukou průměrných dobrých vývojářů vám jaro pravděpodobně pomůže zvýšit výkon tím, že pomůže napsat čistý jednoduchý kód.

3
jasonk

Jaro se těžko snaží být neinvazivní, pokud jde o to, aby byl volně spojen s kódem vaší aplikace.

To se také pohybuje více v tomto směru přes tiem. V dřívějších verzích byste potřebovali rozšířit základní třídy, pak se přesunuli do anotací a v dnešní době je stále více a více využíváno POJO konfigurovaných v XML.

To je obrovský strategický přínos oproti jiným aplikačním rámcům.

1

Jaro se nyní v podstatě stalo součástí platformy. Všude v JEE5 a 6 najdete více a více vstřikování zdrojů, takže alespoň ta část Jara, pokud se s ní budete držet, je/bude jen další částí platformy, (viz @Inject). Další části ... nejsou si tím jisté, zejména pokud jde o programování zaměřené na aspekty. Existují další poskytovatelé těchto služeb, Guice, původem z Googlu, a Weld, z JBoss, věřím, že postavený na Guice, dodá stejnou funkcionalitu, pokud se budete držet závislosti JSR-330 Java závislosti) specifikace vstřikování.

YMMV

1
mezmo