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?
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?
Yanıtlar:
Temelde Bahar, bağımlılık enjeksiyon bu da çok ayrışmış sistemlerin oluşturulmasına izin veren bir model.
Ö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!
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 userLister
alan 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?
UserLister
Arayüzünüzün başka bir uygulamasını kullanmak isterseniz ne olur ? Sadece XML'i değiştirin.UserLister
Hazır bir uygulamanız yoksa ne olur ? Geçici bir sahte uygulama programlayın UserLister
ve görüşün gelişimini kolaylaştırın.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.
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
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:
Ayrıca bahar-sosyal-facebook gibi bazı küçük projeler de var ( http://projects.spring.io/spring-social-facebook/ )
Spring Framework projesinin bir Spring MVC
parç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 .
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:
Daha fazla okuma: http://discuss.joelonsoftware.com/?joel.3.219431.12
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.
Bahar üç şeydir.
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.
Spring ile bir web uygulamasında muhtemelen ne istersiniz -
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.
Bunun iki bölümünü görüyorum:
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 ...
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).
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.
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
, @Repository
veya @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 @Autowired
ilgili 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;
@Bean
Fasulye uygulamasının enjekte edilmesi için kullanılan bir yöntemdeki ek açıklamayı kullanın .
@Bean
Ek açıklamayı sınıf düzeyinde kullanamazsınız . Biri olmalıdır @Component
, @Service
, @Repository
vb 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ı.
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.
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 !
Spring, Enterprise JavaBeans (EJB) teknolojisine iyi bir alternatiftir . Ayrıca web çerçevesi ve web hizmetleri çerçeve bileşenine sahiptir.
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:
Eski olabilir ama mükemmel bir kitap.
Bu kez başka bir iyi kitap için sadece Spring'e ayrılmış:
Ayrıca Spring'in eski sürümlerine atıfta bulunur, ancak kesinlikle bakmaya değer.
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
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.
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.