Spring Framework tam olarak ne için? [kapalı]


623

Spring hakkında çok şey duydum , insanlar web'in her yerinde Spring'in web geliştirme için iyi bir çerçeve olduğunu söylüyorlar. Spring Framework tam olarak ne için?


10
Sorunun çok geniş olduğunu anlıyorum, ancak bu çok özel durumda sorunun, Bahar hakkında sık sık konuşulan ve ne olduğunu söylemeye bile gerek olmadığını düşünen insanlar tarafından sık sık konuşulan haziran geliştiricileri için sorunun çok önemli olduğunu düşünüyorum. öyle. Sonuçta, Instagram'ı ve amacının ne olduğunu hiç duymadıysanız, elinizi kaldırın .... (itiraf: Hiç Insta kullanmadım)
usr-local-ΕΨΗΕΛΩΝ

2
Soru 10 yıl önce soruldu ve o zaman Spring, Spring Boot, Spring Data, Spring Rest, vb.Gibi tüm alt projeleriyle biraz daha küçüktü ve aslında bu yüzden bir yıl önce daha yakındı. bu sorunun genişliği. Bu soruyu sorduğumda sadece DI'yi ve neden gerekli olduğunu anlamak istedim.
Maksim

Yanıtlar:


713

Temelde Bahar, bu da çok ayrışmış sistemlerin oluşturulmasına izin veren bir model.

Sorun

Örneğin, sistem kullanıcılarını listelemeniz gerektiğini ve dolayısıyla şu şekilde adlandırılan bir arabirimi bildirmeniz gerektiğini varsayalım UserLister:

public interface UserLister {
    List<User> getUsers();
}

Ve belki de tüm kullanıcıları almak için veritabanına erişen bir uygulama:

public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

Size göre bir örneğe erişmeniz gerekir (yalnızca bir örnek, unutmayın):

public class SomeView {
    private UserLister userLister;

    public void render() {
        List<User> users = userLister.getUsers();
        view.render(users);
    }
}

Yukarıdaki kodun değişkeni başlatmadığını unutmayın userLister. Ne yapmalıyız? Açıkça böyle bir nesne somutlaştırırsanız:

UserLister userLister = new UserListerDB();

... DB'ye erişen sınıfı uygulamamla bu görünümü birleştirirdim. DB uygulamasından kullanıcı listesini virgülle ayrılmış bir dosyadan alan başka bir dosyaya geçmek istersem ne olur (unutmayın, bu bir örnek)? Bu durumda, benim kod tekrar gitmek ve yukarıdaki satırı değiştirmek:

UserLister userLister = new UserListerCommaSeparatedFile();

Bunun böyle küçük bir programla bir sorunu yok ama ... Yüzlerce görünümü ve benzer sayıda işletme sınıfı olan bir programda ne olur? Bakım bir kabus oluyor!

Bahar (Bağımlılık Enjeksiyonu) yaklaşımı

Ne İlkbahar yapar etmektir tel bir XML dosyası veya ek açıklamalar, tüm nesneler örneği ve Bahar tarafından başlatıldı ve bu şekilde kullanarak sınıfları yukarı enjekte doğru yerlerde (Servlet, Web Çerçeveleri, İş sınıfları, DAOs, vs, vs, vs içinde ...).

İlkbaharda örneğe dönersek, sadece userListeralan için bir ayarlayıcıya ve şu gibi bir XML dosyasına sahip olmamız gerekir :

<bean id="userLister" class="UserListerDB" />

<bean class="SomeView">
    <property name="userLister" ref="userLister" />
</bean>

veya daha basit bir şekilde, görünüm sınıfımızdaki dosyaları aşağıdakilerle ek açıklamalara ekleyin @Inject:

@Inject
private UserLister userLister;

Bu şekilde görünüm oluşturulduğunda sihirli bir UserListerşekilde çalışmaya hazır hale gelir.

List<User> users = userLister.getUsers();  // This will actually work
                                           // without adding any line of code

Bu harika! Öyle değil mi?

  • UserListerArayüzünüzün başka bir uygulamasını kullanmak isterseniz ne olur ? Sadece XML'i değiştirin.
  • UserListerHazır bir uygulamanız yoksa ne olur ? Geçici bir sahte uygulama programlayın UserListerve görüşün gelişimini kolaylaştırın.
  • Baharı artık kullanmak istemezsem ne olur? Sadece kullanma! Uygulamanız buna bağlı değil. Kontrolün ters çevrilmesi : "Uygulama, çerçeveyi değil, uygulamayı kontrol eder" ifadesini kullanır .

Etrafımda Bağımlılık Enjeksiyonu için başka seçenekler de var, bence Spring'i sadeliğinin, şıklığının ve istikrarının yanı sıra bu kadar meşhur kılan şey, SpringSource'un adamları, Spring'i diğer birçok ortak çerçeveyle birleştirmeye yardımcı olan birçok POJO programladı. uygulamanızda müdahaleci. Ayrıca Spring, Spring MVC, Spring WebFlow, Spring Security ve yine etceteraların loooong listesi gibi birkaç iyi alt projeye sahiptir.

Bu yardımcı olur umarım. Her neyse, Martin Fowler'in Bağımlılık Enjeksiyonu ve Kontrolün İnversiyonu hakkındaki makalesini okumanızı tavsiye ediyorum çünkü o benden daha iyi yapıyor. Temelleri bakmak anladıktan sonra Bahar Dokümantasyon Bence, olup eskiden gelmiş geçmiş en iyi Bahar kitap.


148
Bir kod satırını ve XML satırını değiştirmek zorunda kalmanın farkı nedir? Harici xml dosyaları tartışmasız karmaşıklık eklediğinden, çaba ve bakım cehennemi tamamen aynı veya daha da kötüdür? Üzgünüm ama anlamıyorum, hiçbir fayda görmüyorum. Bir şey eksikse lütfen beni doldurun.
fred

23
@fred - Birim testi yaptığınızı düşünün. Bağımlılık enjeksiyonu olmadan (DI ek açıklamalarla veya XML ile kullanılabilir) düzgün bir şekilde test edemezsiniz, çünkü bağımlılıkları alay edemezsiniz.
Petar Minchev

18
@fred - XML'deki tüm enjeksiyonları tanımlamak çok az mantıklı. Bakımı büyük bir yük. Bu nedenle EJB, enjeksiyon noktaları için ek açıklamalar kavramını tanıttı. Bunlar çok daha basit ve varsayılan bir örnek enjekte edilecek (birim testleri için bu bir kez değiştirilebilir). Bu o kadar iyi çalıştı ki, Spring şimdi bu yaklaşımı kopyaladı. Gerekirse (ancak gerçekten gerekliyse) ek açıklamaların yine de EJB'deki XML tarafından geçersiz kılınabileceğini unutmayın.
Mike Braun

36
Veya, fabrikada statik bir yöntem kullanın. Fabrikanın dönüş türünü değiştirin ve şimdi bu dönüş değerini kullanan tüm sınıflar değiştirildi. Presto Spring artık gerekli değil ...
Qix - MONICA

16
@ mmcrae Ben IDE benim XML yazmak yerine bir refactorization çağrı yapmak istiyorum.
Qix - MONICA

63

Yay içerir ( Skaffman haklı işaret ettiği gibi bir MVC çerçevesi). Kısaca açıklamak gerekirse benim girdilerim. Spring, hizmet katmanı, web katmanı ve iş katmanının ayrılmasını destekler, ancak gerçekten en iyi yaptığı şey nesnelerin "enjekte edilmesidir". Bunu bir örnekle açıklamak için aşağıdaki örneği düşünün:

public interface FourWheel
{
   public void drive();
}

public class Sedan implements FourWheel
{
   public void drive()
   {
      //drive gracefully
   }
}

public class SUV implements FourWheel
{
   public void drive()
   {
      //Rule the rough terrain
   }
}

Şimdi kodunuzda RoadTrip adlı bir sınıfınız var.

public class RoadTrip
{
    private FourWheel myCarForTrip;
}

Şimdi ne zaman bir Trip örneği istersen; bazen bir SUV'un FourWheel'i başlatmasını veya bazen Sedan'ı isteyebilirsiniz. Gerçekten belirli bir duruma bağlı olarak ne istediğinize bağlıdır.

Bu sorunu çözmek için yaratıcı desen olarak bir Fabrika Deseni olmasını istersiniz. Burada fabrika doğru örneği döndürür. Sonuç olarak, nesneleri doğru şekilde örneklemek için çok sayıda yapıştırıcı kodu elde edersiniz. Bahar, tutkal kodu olmadan en iyi tutkal kodu işini yapar. XML'de eşlemeler beyan edersiniz ve nesneler otomatik olarak başlatılır. Ayrıca, örnekler için singleton mimarisi kullanarak çok şey yapar ve optimize edilmiş bellek kullanımına yardımcı olur.

Buna Kontrol Denetimi de denir. Bunu yapmak için diğer çerçeveler Google guice, Pico container vb.

Bunun dışında, Spring'in doğrulama çerçevesi, JDBC, iBatis ve Hibernate (ve daha birçokları) ile işbirliği içinde DAO katmanı için kapsamlı desteği var. Veritabanı işlemleri üzerinde mükemmel İşlem kontrolü sağlar.

Spring'de "Pro Spring" gibi iyi kitaplarda okunabilen çok daha fazlası var.

Aşağıdaki URL'ler de yardımcı olabilir.
http://static.springframework.org/docs/Spring-MVC-step-by-step/
http://en.wikipedia.org/wiki/Spring_Framework
http://www.theserverside.com/tt/articles/article .tss? l = Spring Framework


5
Bahar bir MVC çerçevesi içerir . Ama bundan çok, çok daha fazlası.
skaffman

Çok fazla nitpick yapmak istemeyen WebMVC, çekirdek yay dağıtımının bir parçasıdır. Webflow, RCP ve ark.
skaffman

1
Bu güzel, Java'da Arabirim türünde nesneler başlatabileceğinizi bilmiyordum - bu yasadışı @skaffman bu cevabı anlamama yardımcı oluyor (bkz. FourWheel Örneği)
Jossie Calderon

47

Eski günler, Bahar sadece ( Guice , PicoContainer , ...) gibi bir bağımlılık enjeksiyon çerçeve çalışmasıydı , ancak günümüzde Kurumsal Uygulamanızı oluşturmak için toplam bir çözümdür .

Tabii ki, baharın kalbi olan yay bağımlılığı enjeksiyonu hala orada (ve burada diğer iyi cevapları gözden geçirebilirsiniz), ancak ilkbahardan daha fazlası var ...

Bahar şimdi her biri bazı alt projelere sahip çok sayıda projeye sahip ( http://spring.io/projects ). Birisi bahar hakkında konuştuğunda, hangi bahar projesinden bahsettiğini öğrenmelisiniz , sadece bahar çerçevesi olarak bilinen bahar çekirdeği mi yoksa başka bir bahar projesi mi?

Çok bahsetmeye değer bazı bahar projeleri şunlardır:

Uygulamanız için biraz daha belirtme özelliğine ihtiyacınız varsa, orada da bulabilirsiniz:

  • Toplu
    uygulamanın geliştirilmesini sağlamak için tasarlanmış Spring Batch toplu çerçeve
  • Bahar HATEOAS HATEOAS prensibi dayalı REST API kolay oluşturma
  • Mobil uygulama geliştirme için Spring Mobile ve Spring Andriod
  • Spring Shell , tam özellikli bir kabuk (komut satırı olarak da bilinir) uygulaması oluşturur
  • Bulut uygulamaları için Spring Cloud ve Spring Cloud Veri Akışı

Ayrıca bahar-sosyal-facebook gibi bazı küçük projeler de var ( http://projects.spring.io/spring-social-facebook/ )

Spring Framework projesinin bir Spring MVCparçası olan modüle sahip olduğu için yayı web geliştirme için kullanabilirsiniz . Ya da yayı, struts2 gibi başka bir web çerçevesiyle kullanabilirsiniz .


1
Aslında mvc, data, jpa ve Spring'in diğer bölümlerinin Spring'in çekirdek DI'sini kullanmama seçeneğine sahip olduğunu görmek istiyorum, ancak Dagger'ı Spring'in merkezine koyun.
dlamblin

25

Bahar ne işe yarıyor? Bu soruyu kısaca cevaplayacağım, ama önce victor hugo'nun örneğine bir göz atalım. Bu harika bir örnek değil çünkü yeni bir çerçeveye olan ihtiyacı haklı çıkarmıyor.

public class BaseView {
  protected UserLister userLister;

  public BaseView() {
    userLister = new UserListerDB(); // only line of code that needs changing
  }
}

public class SomeView extends BaseView {
  public SomeView() {
    super();
  }

  public void render() {
    List<User> users = userLister.getUsers();
    view.render(users);
  }
}

Bitti! Şimdi, yüzlerce veya binlerce görüşünüz olsa bile, Spring XML yaklaşımında olduğu gibi yine de tek bir kod satırını değiştirmeniz gerekir. Ancak bir kod satırını değiştirmek, söylediğiniz XML'i düzenlemenin aksine yeniden derlemeyi gerektiriyor mu? Peki telaşlı arkadaşım, Ant ve komut dosyasını kullanın!

Peki Bahar ne işe yarıyor? Bu ... için:

  1. Sürüyü takip eden kör geliştiriciler
  2. Uni'de böyle çerçeveler öğretmedikleri için yüksek lisans programcısı almak istemeyen işverenler
  3. Kötü bir tasarımla başlayan ve patchwork gerektiren projeler (victor hugo örneğinde gösterildiği gibi)

Daha fazla okuma: http://discuss.joelonsoftware.com/?joel.3.219431.12


11
Hayal kırıklığı bir yana, argümanlarınızı merak ediyorum. Kötü tasarım üretmek için kullanamayacağınız hiçbir programlama aracı bilmiyorum. Amaç, çerçeveler kullanarak kötü kod birçok şey yapabilirsiniz yapabilirsiniz. Bu evrensel olarak doğrudur ve Spring'e özgü değildir. Yoksa ne demek istiyorsun? Yetkili geliştiricilerin, Spring'in sunduğu şeylerden büyük ölçüde faydalandıklarını düşünmüyor musunuz - hangi çerçevenin hangi araçlarını kullandıklarında özel olmak? En azından hiçbir Spring geliştiricisinin sınıfları genişletmeyi hiç duymadığını ima etmediğinden eminim. Bununla birlikte, daha fazla okuma komiktir.
sthzg

2
Ayrıca, örneğin, görünümün yalnızca bir enjekte edilmiş hizmete ( UserLister) ihtiyacı olduğu için çalışır , ancak farklı çocukların çocukları arasında paylaşılmayan birkaç hizmete ihtiyacı varsa ne olur BaseView? (Neyse ki) Java'da çoklu kalıtım yoktur.
Edouard Berthe

@EdouardBerthe Fuar noktası. Cevabım DI'yi göz ardı etme girişimi değildi, sadece kabul edilen cevapta gösterilen örneğin en büyük olmadığını gösteriyor; önerdiğiniz senaryo büyük olasılıkla daha iyi sonuç verir. Gerçekten anlatmaya çalıştığım nokta, DI'ye ihtiyacınız olmadığı değil, bunu yapmak için tüm bir çerçeveye ihtiyacınız olmadığıdır.
Kül

19

Çok kısa özetle, Bahar'ın uygulamanızdaki "tutkal" olduğunu söyleyeceğim. Farklı çerçeveleri ve kendi kodunuzu entegre etmek için kullanılır.


15

Bahar üç şeydir.

  1. Yay, Bağımlılık Enjeksiyonu ile ilgilenir ve Martin Fowler'in bağımlılık enjeksiyonuna mükemmel girişini okumanızı tavsiye ederim.
  2. Spring'in yaptığı ikinci şey, uygulamalarınızda kullanmak için mükemmel Java kitaplıklarını çok zarif bir şekilde sarmaktır. İyi bir örnek için Spring'in Görev Yürütücülerini ve Kuvars Zamanlayıcı'yı nasıl tamamladığını görün.
  3. Üçüncü olarak Spring, REST, bir MVC web çerçevesi ve daha fazlası gibi bir dizi web uygulaması sunar. İlk ikisi için Spring kullandığınızdan beri rakamlar, belki sadece web uygulamanızın ihtiyacı olan her şey için kullanabilirsiniz.

Sorun şu ki, Spring DI gerçekten iyi düşünülmüş, diğer şeylerin etrafındaki sarmalayıcılar gerçekten iyi düşünülmüş, diğer şeyler her şeyi düşündü ve Spring sadece güzel bir şekilde sarar. MVC ve REST'in bahar uygulamaları ve diğer tüm şeyler iyi yapılmamıştır (YMMV, IMHO) ama istisnalar vardır (Spring Security da bombadır). Bu yüzden Spring for DI'yi ve havalı sarmalayıcılarını kullanma eğilimindeyim, ancak Web (Goblen'i çok seviyorum), REST (Jersey gerçekten sağlam) vb.


9
YMMV, IMHO - Benim gibi kısaltmalarda akıcı olmayanlar için Kilometreniz Değişebilir, Benim Mütevazı
Görüşümde

11

Spring ile bir web uygulamasında muhtemelen ne istersiniz -

  • 2.5+ ile POJO'ları Kontrolör sınıfları olarak kullanmanıza izin veren Spring MVC, herhangi bir belirli çerçeveden (Struts veya Spring pre-2.5'te olduğu gibi) genişletmeniz gerekmez. Kısmen bağımlılık enjeksiyonu sayesinde kontrolör sınıflarının test edilmesi de kolaydır
  • Bu ORM çözümü ile çalışmayı basitleştirmek için iyi bir iş çıkaran Hibernate ile bahar entegrasyonu (çoğu durumda)
  • Web uygulaması için Spring'i kullanmak, Etki Alanı Nesnelerinizi uygulamanın tüm düzeylerinde kullanmanıza olanak tanır; Hazırda Bekletme kullanılarak eşlenen sınıflar, "form fasulye" olarak kullandığınız sınıflardır. Doğası gereği, bu daha sağlam bir alan modeline yol açacaktır, çünkü kısmen sınıf sayısını azaltacaktır.
  • Yay form etiketleri, çok fazla uğraşmadan formlar oluşturmayı kolaylaştırır.

Buna ek olarak, Bahar BÜYÜK - bu yüzden Bahar AOP veya Bahar Güvenliği gibi bir web uygulamasında kullanmak ilginizi çekebilecek birçok şey var. Ancak yukarıda listelenen dört şey, Spring'in bir web uygulamasında kullanılan ortak bileşenlerini açıklar.


9

Bunun iki bölümünü görüyorum:

  1. "Bahar tam olarak ne için" -> bkz.
  2. "[...] Bahar web geliştirme için [a] iyi bir çerçeve" -> insanlar bunun Bahar MVC hakkında konuştuğunu söylüyor. Spring MVC, Spring'in birçok bölümünden biridir ve bağımlılık enjeksiyonu gibi Spring'in genel özelliklerini kullanan bir web çerçevesidir. Çok yapılandırılabilir olması nedeniyle oldukça genel bir çerçevedir: farklı db katmanları (Hazırda Beklet, iBatis, düz JDBC), farklı görünüm katmanları (JSP, Velocity, Freemarker ...) kullanabilirsiniz.

Spring'i MVC kullanmadan bir web uygulamasında mükemmel bir şekilde kullanabileceğinizi unutmayın. Wicket, Struts, Seam, gibi diğer web çerçevelerini kullanırken çoğu Java web uygulamasının bunu yaptığını söyleyebilirim ...


8

Bahar, sınıf örneklerini birbirine yapıştırmak için mükemmeldir. Hazırda Bekleme sınıflarınızın her zaman bir veri kaynağına ihtiyaç duyacağını biliyorsunuz, Spring onları birbirine bağlıyor (ve veri kaynağının da bir uygulaması var).

Veri erişim nesnelerinizin her zaman Hazırda Bekleme erişimi gerekir, Bahar Hazırda Bekleme sınıflarını sizin için DAO'larınıza bağlar.

Buna ek olarak, Spring temel olarak bir grup kütüphanenin sağlam konfigürasyonlarını verir ve bu sayede hangi kütüphaneleri kullanmanız gerektiği konusunda size rehberlik eder.

Bahar gerçekten harika bir araç. (Bahar MVC'den bahsetmiyordum, sadece temel çerçeve).


5

Kabul edilen cevap ek açıklamaların kullanımını içermez, çünkü Spring yapılandırma için çeşitli ek açıklamalara destek sağlamıştır.

Bahar (Bağımlılık Enjeksiyonu) yaklaşımı

Bir XML dosyası kullanarak sınıfları birbirine bağlamak için başka bir yol var: ek açıklamalar. En kabul cevabını örnek verelim ve ek açıklamalar birini kullanarak sınıfına doğrudan fasulye kayıt @Component, @Service, @Repositoryveya @Configuration:

@Component
public class UserListerDB implements UserLister {
    public List<User> getUsers() {
        // DB access code here
    }
}

Bu şekilde görünüm oluşturulduğunda, sihirli bir şekilde çalışmaya hazır bir UserLister olacaktır.

Yukarıdaki ifade, herhangi bir XML dosyası kullanımına ve @Autowiredilgili bir uygulamayı bulan ve içine enjekte eden başka bir ek açıklama ile kablolamaya gerek kalmadan küçük bir bonus ile geçerlidir .

@Autowired
private UserLister userLister;

@BeanFasulye uygulamasının enjekte edilmesi için kullanılan bir yöntemdeki ek açıklamayı kullanın .


Yanlış. @BeanEk açıklamayı sınıf düzeyinde kullanamazsınız . Biri olmalıdır @Component, @Service, @Repositoryvb istirahat doğrudur. Ayrıca, Arayüzün bu şekilde Otomatik Kablo Bağlantısının yalnızca sınıf yolunda enjeksiyon için uygun yalnızca 1 aday sınıfı varsa işe yarayacağına dikkat etmelisiniz, aksi takdirde Bahar uygulama hatası.
Stefano L

@StefanoL: Evet, haklısın. İnsanların hatamı görmezden geldiğini merak ediyorum. Yorum için teşekkürler.
Nikolas

4

Avantaj Bağımlılık Enjeksiyonu (DI) . Nesne yaratma görevinin dış kaynak kullanımı anlamına gelir. Bir örnekle açıklayayım.

public interface Lunch
{
   public void eat();
}

public class Buffet implements Lunch
{
   public void eat()
   {
      // Eat as much as you can 
   }
}

public class Plated implements Lunch
{
   public void eat()
   {
      // Eat a limited portion
   }
}

Şimdi benim kodda aşağıdaki gibi bir sınıf LunchDecide var:

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(){
        this.todaysLunch = new Buffet(); // choose Buffet -> eat as much as you want
        //this.todaysLunch = new Plated(); // choose Plated -> eat a limited portion 
    }
}

Yukarıdaki sınıfta, ruh halimize bağlı olarak, Açık Büfe () veya Kaplama () seçiyoruz. Ancak bu sistem sıkı sıkıya bağlıdır. Farklı bir Nesne türüne her ihtiyaç duyduğumuzda, kodu değiştirmemiz gerekir. Bu durumda, bir satır yorum! 50 farklı kişi tarafından kullanılan 50 farklı sınıf olduğunu düşünün. Bu bir karışıklık olurdu. Bu durumda sistemi ayırmamız gerekir. Şimdi LunchDecide sınıfını yeniden yazalım.

public class LunchDecide {
    private Lunch todaysLunch;
    public LunchDecide(Lunch todaysLunch){
        this.todaysLunch = todaysLunch
        }
    }

Yeni anahtar sözcük kullanarak bir nesne oluşturmak yerine, başvuruyu yapıcımıza bir parametre olarak Öğle Yemeği Türü nesnesine gönderdik. Burada, nesne yaratma dış kaynaklıdır. Bu kod Xml yapılandırma dosyası (eski) veya Java Ek Açıklamaları (modern) kullanılarak bağlanabilir. Her iki durumda da, hangi Nesne türünün oluşturulacağına karar çalışma zamanı sırasında orada verilecektir. Bir nesne kodumuza Xml tarafından enjekte edilir - Kodumuz bu iş için Xml'ye bağlıdır. Bu nedenle, Bağımlılık Enjeksiyonu (DI). DI sadece sistemimizi gevşek bir şekilde birleştirmeye yardımcı olmakla kalmaz, aynı zamanda bağımlılıkların alay edilmesine izin verdiği için Birim testlerinin yazılmasını da kolaylaştırır. Son olarak, en az değil, DI, modülasyonun daha fazla ayrıştırılmasına ve artmasına neden olan En Boy Odaklı Programlamayı (AOP) kolaylaştırır. Ayrıca yukarıdaki DI yapıcı enjeksiyon olduğunu unutmayın.


Ama Bahar durumunda bile, fasulye tanımlayacağız. ve fasulye kimliği kodda verilecek, değil mi? yani yarın fasulyeyi değiştirirseniz, yine de kodu değiştirmeniz gerekir, değil mi? yani faydası ne?
Arpan Buch

@ArpanBuch Baharın yararı, herhangi bir kodu yeniden derlemeden farklı bir uygulama seçebilmenizdir (diğer uygulama zaten var olduğu sürece). Ben bir acemiyim, bu yüzden yanlış olabilirim.
byxor

4
  • Spring, J2EE ile karşılaştırıldığında hafif ve esnek bir çerçevedir.
  • Yay kabı, kontrolü tersine çevirme görevi görür.
  • Spring, AOP yani proxy'ler ve Singleton, Fabrika ve Şablon Yöntemi Tasarım kalıplarını kullanır.
  • Katmanlı mimariler: Endişelerin ve Yeniden kullanılabilir katmanların ayrılması ve Kolay bakım.

resim açıklamasını buraya girin


1
Spring Framework help you with several things like, don't reinvent the wheel. you can connect very easily with some database just using Spring Data, or create schedule tasks like CronJob or Windows Task. amazing !
tomj0101

3

Spring, Enterprise JavaBeans (EJB) teknolojisine iyi bir alternatiftir . Ayrıca web çerçevesi ve web hizmetleri çerçeve bileşenine sahiptir.


1
Düzeltebilir miyim? Was (korkunç) EJB 2 ... (kısmen JPA 2, vs) "yeni bir EJB" kabul kanal açma gibi görünüyor alternatif. "Mutlu saatler" bahar bölümünün "bir tür EJB" geçmiş gibi görünüyor. reklam 2015
Jacek Cz

1

Spring oldukça basit bir bağımlılık enjeksiyon sistemi olarak başladı. Şimdi çok büyük ve içinde her şey var (meşhur mutfak lavabo hariç).

Ama korkmayın, oldukça modülerdir, böylece sadece istediğiniz parçaları kullanabilirsiniz.

Her şeyin nerede başladığını görmek için şunu deneyin:

http://www.amazon.com/Expert-One-Design-Development-Programmer/dp/0764543857/ref=sr_1_1?ie=UTF8&s=books&qid=1246374863&sr=1-1

Eski olabilir ama mükemmel bir kitap.

Bu kez başka bir iyi kitap için sadece Spring'e ayrılmış:

http://www.amazon.com/Professional-Java-Development-Spring-Framework/dp/0764574833/ref=sr_1_2?ie=UTF8&s=books&qid=1246374863&sr=1-2

Ayrıca Spring'in eski sürümlerine atıfta bulunur, ancak kesinlikle bakmaya değer.


1

Bahar başlangıçta bağımlılık enjeksiyonuydu, sonra hemen hemen her şey için sargı kralı ekleyin (JPA uygulamaları vb. Üzerine sarıcı).

Uzun hikaye ... Bahar çoğu XML çözümleri (XML komut dosyası motoru ... brrrr) tercih, bu yüzden DI için Guice kullanın

İyi kütüphane, ancak büyüyen depnedenciec ile, örneğin Spring JDBC (belki gerçek ad parametreleri ile bir Java jdbc çözümü) sonraki 4-5 maven alır.

Web geliştirme için Spring MVC ("büyük bahar" bir parçası) kullanarak ... "istek tabanlı" çerçeve, kutsal savaş "bileşen vs vs talep" ... size


1
Şimdi Spring çerçevesinin XML'den Ek Açıklamalar ve Java yapılandırmasına geçmeye çalıştığına inanıyorum.
Maksim

0

Geçmişte Bahar çerçevesini tamamen teknik açıdan düşündüm.

Takım çalışması ve kurumsal Webapps geliştirme konusunda bazı deneyimler göz önüne alındığında, Spring'in bireysel öğelerini (fasulye) birbirinden ayırarak uygulamaların (web uygulamaları) daha hızlı geliştirilmesi için olduğunu söyleyebilirim . Daha hızlı gelişme onu çok popüler kılıyor. Bahar, uygulamanın Bahar çerçevesine inşa edilmesi (kablolanması) sorumluluğunun değiştirilmesine izin verir. Spring çerçevesinin bağımlılık enjeksiyonu , bireysel çekirdekleri çalışan bir uygulamaya bağlamak / kablolamaktan sorumludur.

Bu şekilde, geliştiriciler, fasulye arasındaki arayüzler tanımlanır tanımlanmaz, tek tek bileşenlerin (fasulye) geliştirilmesine daha fazla odaklanabilirler.

Bu tür bir uygulamanın test edilmesi kolaydır - birincil odak bireysel fasulyeye verilir. Kolayca ayrıştırılabilir ve alay edilebilir, böylece birim testi hızlı ve etkilidir.

Yay çerçevesi gibi birden çok özel fasulye tanımlar @Controller ( @Restcontroller ), @Repository , @Component Web amaçlara hizmet etmek. Maven ile birlikte bahar, geliştiricilere sezgisel bir yapı sağlar. Bireysel elemanlar ayrı tutulduğundan ve tekrar kullanılabileceğinden ekip çalışması kolay ve hızlıdır.


0

Spring framework kesinlikle web geliştirme için iyidir ve dinlendirici api hizmetleri için daha spesifik olmak.

Bağımlılık enjeksiyonu ve yay güvenliği , yaylı aop , mvc çerçeve , mikro hizmetler gibi diğer modüllerle entegrasyonu nedeniyle yukarıdakilere iyi gelir.

Herhangi bir uygulamada, güvenlik büyük olasılıkla bir gerekliliktir.
Uzun bakım gerektiren bir ürün yapmayı hedefliyorsanız, Aop konseptini kullanmanız gerekir.

Uygulamanızın çok fazla trafiğe sahip olması ve böylece yükün artması gerekiyorsa, mikro hizmet kavramını kullanmanız gerekir.

Spring tüm bu özellikleri tek bir platformda sunuyor. Birçok modülle destek .
En önemlisi, bahar açık kaynak ve genişletilebilir bir çerçevedir, özel kodu yaşam döngüsüne entegre etmek için her yerde bir kancaya sahiptir.

Spring Data , projenizle entegrasyon sağlayan bir projedir.


Böylece bahar neredeyse her gereksinime uyabilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.