it-swarm.asia

Neden Spring çerçevesi değil?

Uygulamamı Spring framework'e bağlamada herhangi bir dezavantaj var mı?

Varsa, hatalar veya bunun gibi konulardan bahsetmiyorum. Uygulama yaşam döngümü etkileyecek stratejik, mimari şeylerden bahsediyorum.

Spring'i tercih etmeli miyim Java EE kapsayıcısı tarafından desteklenen EE temel özellikleri? Avantajları nelerdir?

43

Buradaki diğer gönderiler yukarıdan bahsettiğinden, Bahar'ın olumsuz yönlerinden bahsedeceğim. Bu olumsuzluklarla bile, Bahar nişinde güvenilir, güvenilir ve reklamı yapılan gibi çalışıyor.

Yani, negatiflere:

  • Muazzam: Küçük hobi projeme 3000 sınıflı kavanozlar koymak istemiyorum.

  • Guice veya Pico gibi diğer DI çerçevelerinden daha yavaş olduğu konusunda bazı açıklamalar var. anekdot ve muhtemelen çok önemli değil.

  • İlkbaharın bazı kısımlarıyla uğraşmak, çekirdeğin iyi belgelenmiş parçaları ve birden fazla ana versiyonda farklılıklar bulacağınız belgelerde sinir bozucu olabilir.

Boyutunun bir yan etkisi olarak, mantıklı bir şekilde adlandırılırken, yorgun olduğunuzda devasa bir isim yığınıyla birleşmeye başlayan sınıfların yığınlarını kazarak keyifli saatler geçirmeye hazır olun ("elbette, sadece TransactionAwareConnectionFactoryProxy'nizi UserCredentialsConnectionFactoryAdapter .. zzzzzzzz "için). Adil olmak gerekirse, gerçekten mantıklı olarak adlandırılırlar, bu çerçevenin boyutuna makul bir yanıttır, ancak yine de.

Muhtemelen yeni parçaların bu adaptasyonu sonucunda, bahar en azından benim için yavaş olabilir. Çekirdek yay ile o kadar çok değil, ama hemen hemen her şey için konektörler var ve hepsi olabildiğince iyi belgelenmiyor ve o zaman isim çorbasıyla göletmeye başlıyorsunuz. Yine, hepsi sadece boyutuna yanıt olarak.

42
Steve B.

Baharın çok az dezavantajı var

Spring'i kullanmanın ciddi bir dezavantajı bulmak için uzun ve zor düşündüm ve korkarım başarısız oldum. Spring, JEE/OSGi modellerinde mükemmel bir araç setidir. Uygulama kapları tarafından sağlanan genellikle hantal destekleyici API'lerle çalışmayı büyük ölçüde kolaylaştıran çok çeşitli non-invaziv şablonlar sağlar.

Bahar, çekirdek JEE'ye karşı

Spring, temel JEE teknolojilerinin yerini almaz - belki EJB'lerin yerini almaz, ancak yeni EJB3 spesifikasyonu ile neredeyse hiç bir şey yoktur - bunun yerine bunları daha kolay kullanmak için şablonlar sağlar. JAX-RS'i RESTful web hizmetleri API'sini düşünün. Yay, tipik olarak aşağıdaki şekilde kullanılan RestTemplate değerini sağlar (enjekte edildiğini varsayın):

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

Bu, someURI XML/JSON/YAML olsun ve belirttiğiniz etki alanı nesnesine unmarshal gider. Hepsi tek bir kod satırında.

Özel durumlar ve hata günlüğü, yerel kodun temiz tutulmasını kolaylaştıran çalışma zamanı özel durumları olarak ele alınır. Spring, mümkün olan yerlerde harici bağımlılıkları azaltmak için bile çalışır, bu nedenle yukarıdaki örnek sadece Java.net. * Paketlerini kullanır).

JMS, JAX-WS, JPA, JTA ve üstü için şablonlar vardır. Hepsi bu standartlarla çalışmayı çok kolaylaştırır ve kodunuzu daha temiz ve daha az hataya eğilimli hale getirir.

Pick'n'mix mimarisi

Mimari açıdan Spring, hafif bir pick'n'mix yaklaşımını vurgular. Bu, sistem mimarlarının WebSphere, JBoss veya Glassfish gibi şişirilmiş herkes için uygulama kapları kullanmaktan kaçınmalarını ve bunun yerine hafif isimlerini - İskelesi, Tomcat vb.

Bu neden önemli? Daha büyük uygulama kapları, bazı istemcilerin ihtiyaçlarına diğerlerinden daha fazla uyan daha uzun bir güncelleme döngüsüne sahiptir. Bankaların tek kişilik bir girişim kadar çevik olmaları gerekmez.

En yeni destekleyici çerçeveleri kullanmak istiyorsanız, bunları büyük uygulama kaplarında bulamazsınız. Bunun yerine, bunları manuel olarak eklemeniz gerekir ve Spring bunu kolaylaştırır.

Ayrıca, yalnızca ihtiyaç duyduğunuz teknolojileri dahil etmeniz gerekir. Uygulama kapları size JMS, EJB ve Güneş altındaki diğer tüm kısaltmaları verecektir, ancak JPA ile kolay kalıcılık istiyorsunuz. Bahar ve Hazırda Bekletme'yi ekleyin ve işiniz bitti.

Peki neden Bahar olmasın?

Satıcıya özgü kitaplık uygulamalarına gitmek istiyorsanız Spring'den kaçının. Ayrıca, yapılandırma ayrıntılarınızı XML veya JNDI olarak dışlamak yerine sınıflarınızda tutmak istiyorsanız bundan kaçının. Ve özgür ve açık kaynaklı çözümlerin ortamınız için uygun olmadığını düşünüyorsanız kesinlikle bundan kaçının.

9
Gary Rowe

martin Thompson'ın bahsettiği ilginç bir şey bu makale , baharın GC zamanları üzerinde önemsiz bir etkiye sahip olabileceğidir:

Çağrı yığınlarını oldukça küçük tutun. Burada yapılacak daha çok iş var. Spring'i kullanacak kadar deliyseniz, ne demek istediğimi görmek için çağrı yığınlarına göz atın! Çöp toplayıcı ulaşılabilir nesneleri bulmak için onları yürümek zorundadır. Martin Thompson

Bu tür şeyler çoğu uygulama için büyük bir sorun olmayacak, ancak Martin'in bahsettiği uygulama türleri için çok gerçek bir endişe.

5
Paul Sanwald

Bahar gerçekten güzel. Spring Core iyidir. Diğer noktalara ekleyeceğim, eğer performansın gerçekten endişe duyduğu niş kategorisindeyseniz, sadece en iyi geliştiricilerin elindeyseniz, diğer Bahar modüllerinden kaçınmak isteyeceksiniz. Bu, yalnızca performansın gerçekten kritik olduğu bir sistem çalıştırıyorsanız endişe vericidir. İyi geliştiricilerin ortalamasının elinde, Spring muhtemelen temiz basit kod yazmaya yardımcı olarak size bir performans artışı verecektir.

3
jasonk

Spring, uygulama kodunuzdan gevşek bir şekilde bağlı kalması açısından invazif olmamaya çalışmaktadır.

Aynı zamanda tiem üzerinde bu yönde daha fazla hareket ediyor. Önceki sürümlerde temel sınıfları genişletmeniz gerekiyordu, daha sonra ek açıklamalara taşındı ve günümüzde XML'de yapılandırılmış POJO'ların giderek daha fazla kullanımı.

Bu, diğer uygulama çerçevelerine göre büyük bir stratejik faydadır.

1

Bahar temelde platformun bir parçası haline geldi. JEE5 ve 6'da her yerde daha fazla kaynak enjeksiyonu buluyorsunuz, bu yüzden en azından Spring'in bir kısmı, ona bağlı kalırsanız, platformun sadece bir parçası olacak/olacaktır, (@Inject'e bakın). Diğer parçalar ... özellikle en boy yönelimli programlama söz konusu olduğunda pek emin değilim. Bu hizmetlerin başka sağlayıcıları var, Guice, aslen Google'dan ve Weld, JBoss'tan, Guice üzerine kurulu olduğuna inanıyorum, JSR-330 Java bağımlılığına bağlı kalırsanız) aynı işlevi sunacak enjeksiyon özellikleri.

YMMV

1
mezmo