Bahar - Konfigürasyon konusunda karışıklık mı var?


9

Spring'i okuduğum bir yerde yapılandırma konusunda kolaylık sağlıyor. Ama Bahar millet yapılandırma üzerinde çok fazla değişiklik getiriyor, ben şimdi gerçekten xml yapılandırma veya ek açıklama kullanmak için kafam karışıyor.

Herkes xml ve ek açıklamaları kullanarak emin bir yöntem veya başparmak kuralı önermek istiyorum.


SO'daki benim gibi birçok yeni başlayanın yapılandırma konusunda kafası karıştığını gösteren örnekler.

  • link-1

    Ben işlevselliği geride kavramak görünmüyor <context:annotation-config>ve <context:component-scan>.

    Okuduğumdan farklı ek açıklamaları (@Required, @Autowired vs vs @Component, @Repository, @Service vb.) Ele alıyor gibi görünüyorlar, aynı zamanda okuduğumdan aynı fasulye sonrası işlemci sınıflarını kaydediyorlar.

    Beni daha da karıştırmak için, annotation-configüzerinde bir özellik var <context:component-scan>...

  • bağlantı 2

    Hala bileşen tarama etiketine sahibim:

    <context:component-scan base-package="com.mycompany.maventestwebapp" />

    ama ben de benzer bir görevi var gibi başka bir etiket var, bu:

    <annotation-driven />

    Bu iki etiket arasındaki fark nedir? Başka bir "garip" şey, önceki örneğin (ek açıklama güdümlü etiketi kullanmayan), Spring MVC Template projesini kullanarak STS tarafından oluşturulan projeye çok benzer, ancak ek açıklama güdümlü etiketi yapılandırmasından silersem dosya proje çalışmıyor ve bana şu hatayı verin: HTTP Durum 404 - ...

Bahar 3.2 artık proxy için cglib'e ihtiyaç duymaz, ancak daha düşük sürümlerde cglib kullanılır. Springskaynak blogundan alıntı

Bu tür vekil sunucuları oluşturmak için Spring, cglib adında üçüncü bir kütüphane kullanır. Ne yazık ki, bu proje artık aktif değil. Bahar 3.2'de, Bahar'ın varsayılan olarak Javassist kullanması muhtemeldir.

Bunlar, Spring'in yapılandırma konusunda Karışıklık olduğunu öne sürecek kadar mı?


1
"Bahar millet yapılandırma üzerinde çok fazla değişiklik getiriyor" - bir örnek verebilir misiniz? Bu, okuyucuların sorununuzu daha iyi anlamasına ve sorunuzu cevaplamasına yardımcı olur
gnat

9
Soru o kadar iyi değil, ama başlık komik.
Florian Margaine

1
@gnat'a kendime bahar öğretme sürecinde etrafımda dolaştım ve birçok farklı şekilde ifade edilen aynı şeylerle karşılaştım. bahar belgeleri bir şeyler yapmanın bir yolunu söylüyor, bazı öğreticiler yine de başka bir yol, her ikisi de doğru, öğrenme eğrisi çok yüksek diyor. baharda ?

1
@tito yorumlarda belirttiğiniz gibi, "herhangi bir belge var", bir kaynak isteği gibi geliyor. Kaynak istekleri Programcılar'da pek hoş karşılanmıyor . Anladığım kadarıyla, kişi bunun altında altta yatan bir problemi sunmayı tercih ederdi (görebildiğim kadarıyla, soru metninde bunu "kullanmak için karıştıysanız" yaptınız) - talep edilen belirli kaynaklarla çözülmesi amaçlanan bir sorun
gnat

2
@tito Sanırım sorununuz eski öğreticileri yeni belgelerle karıştırıyor. Bahar, daha önce ifade etmeniz gerekmediği çok "yapılandırma konvansiyonu" haline geldi. Ancak, eski öğreticiler (özellikle 3.1 öncesi) artık gereksiz bir çok şey yapıyor.
Nisan'ta Matsemann

Yanıtlar:


5

Spring size "yapılandırma konvansiyonu" olan bir çerçeve sunmayı amaçlamaktadır. Ancak gerçek şu ki, Bahar uygulamaları belirli bir konfigürasyona ihtiyaç duyuyor.

Spring 2.5.x ve önceki sürümlerde, ortak deyim bu yapılandırmayı XML yoluyla sağlamaktı. Spring 3.0+ ile, deyimsel yol ek açıklamaları kullanmaktır (Java EE6 / 7'nin de teşvik ettiği bir şey).

Bir yan not olarak, açıklamalı bir JPA varlığını görmek eğlenceli (üzücü?) Olabilir, tek bir alana 4+ ek açıklama eklemek oldukça kolaydır ....


ihtiyaç duyulan yapılandırmaların düzeyi, benim gibi küçük bir geliştirici için, bir projenin yapılması için N sayıda çerçeve ile uğraşmak zorunda kalmanın ötesine geçti.

1
Ben ... Farklı kullanışlı şeyi yapar, her biri on ek açıklamaları ile yöntemlerini var
Donal Fellows

1
Öte yandan, sınıfta tek bir @Entity ek açıklaması olan ve başka bir şey olmayan bir JPA varlığına sahip olmak da mümkündür. Bu yapılandırma üzerinde bir konvansiyon değilse, ne olduğunu bilmiyorum. Her şeyin tam olarak istediğiniz gibi çalışmasına ihtiyaç duyuyorsanız, çok fazla yapılandırmayla sonuçlandığınızdan şikayet etmeyin - bunun mümkün olduğundan memnun olun.
Michael Borgwardt

2
Neden 4 ek açıklama seni üzüyor anlamıyorum, eşdeğer xml dosyası nasıl olurdu?
NimChimpsky

Oh, XML çok daha kötü olurdu :-)
Martijn Verburg

0
<annotation-driven />

Bunun geldiği XML şemasını belirtmelisiniz.

Büyük olasılıkla, İşlem Yöneticisi'ni tanımlarken JPA İşlem işleme stratejisi bağlamındadır (bkz. 9.5.6. Spring belgelerinde @Tacacactional kullanımı )

Ek açıklamaya dayalı işlem işlemeyi tanımladığınızda - Spring AOP, yöntem çağrılmadan önce yönteminizi işlemi başlatmak (veya var olan denetimi kontrol etmek) için otomatik olarak yönler oluşturur ve ardından yöntem çağrısı bittikten sonra işlem yapar (veya istisna durumunda geri alma).


0

Tek bir uygulamanız olduğunda ek açıklamaların IoC / Bean oluşturmaya dayalı olduğunu, ancak bunu değiştirmeniz gerekebileceğini buldum.

Fasulyeyi farklı bağımlı sınıflarla / örneklerle tekrar tekrar kullanmanız gerekebileceği bir durumun aksine.

Bu durumlarda fasulyeyi yapılandırmada beyan ederim ve genellikle ihtiyacım olan bağımlılığın yapıcı enjeksiyonunu yaparım. Daha sonra, adı geçen fasulye (ler) i kullanacak olan sınıfta @Autowireve sonra @Qualifier("")- fabrikaların bu şekilde çalışması gerekiyor.

Singleton, yalnızca 1 sonuç döndüren bir fabrika yöntemidir. Bu kolayca uygulanmadığında, karıştırmanız gerekir.

Bileşen taraması ile karşılaştırıldığında, bu gerçekten yukarıdaki kriterlere ve iyi muhakemeye tabidir. Genellikle paket bileşen taraması konusunda çok açıkım. Bu şekilde, IoC kurulumumun geri kalanını test ederken harici bağımlılıkları (db gibi) alay edebileceğim testler için farklı bir uygulama içeriği oluşturabilirim.

Ayrıca, projemde @Componentherhangi bir kütüphane kodu yok . Ne zaman / nasıl bir fasulye kullanmanız gerektiğini asla bilemezsiniz ve eğer @Componentyaparsanız, yanlışlıkla bir taramada alabilir ve yeniden kullanılabilirliğini sınırlayabilirsiniz. Bu durumlar için genellikle kütüphanemde tanımlanan ve ana projemin uygulama içeriğine yapılan ithalata ekleyebileceği bazı kullanışlı fasulye beyanı varsayılanları olan bir uygulama içeriğine sahibim.

Burada din yok. Sadece geçecek deneyimler


0

Bahar seçenekleri sunuyor, başlangıçta sadece xml tabanlı kablolama vardı. Daha sonra ek açıklama tabanlı kablolama eklendi.
Artık her ikisinin bir karışımını kullanmak mümkün (ve birçok insan bunu yapıyor).
Spring'e dahil olan ve / veya springsource web sitesinden indirilebilir çok sayıda belge bulunmaktadır. Mesleki eğitim (hiç yapmadım, kefil olamaz) ve oldukça iyi kitaplar var (APress 'Pro Spring'i seviyorum, kullandığınız Spring sürümü için doğru sürümü seçin).

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.