CodeGym/Java Blogu/Rastgele/Tembel insanlar için bahar Vakfı, temel kavramlar ve kodl...
John Squirrels
Seviye
San Francisco

Tembel insanlar için bahar Vakfı, temel kavramlar ve kodlu örnekler. Bölüm 1

grupta yayınlandı
Tembel insanlar için bahar Vakfı, temel kavramlar ve kodlu örnekler.  Bölüm 1 - 1Bu yazıda, kodumu kullanarak çalışan bir Spring projesini 5 dakikada nasıl çalışır hale getireceğinizi anlatmayacağım. Ben sadece temelleri yazacağım - bilgisiz olabileceğiniz ve yine de bir proje oluşturabileceğiniz şeyler. Ancak bu makalede, neler olduğunu ve daha da önemlisi neden olduğunu hala anlamayacaksınız.

Bahar Çerçevesi nedir?

Spring Framework veya kısaca Spring, Java'da web uygulamaları oluşturmak için en popüler çerçevelerden biridir. Çerçeve bir kitaplık gibidir (belki bu terime daha aşinasınızdır), ancak dikkate alınması gereken bir şey vardır. Kabaca söylemek gerekirse, bir kütüphane kullandığınızda, içerdiği sınıfların örneklerini yaratır, ihtiyacınız olan yöntemleri çağırır ve böylece ihtiyacınız olan sonucu alırsınız. Başka bir deyişle, bu daha zorunlu bir yaklaşımdır: Programınızda, hangi nesneyi yaratmanız, hangi belirli yöntemi ne zaman çağırmanız vb. Sadece kendi sınıflarınızı yazarsınız ve içlerine biraz mantık yazarsınız, ancak daha sonra çerçevenin kendisi sınıflarınızın örneklerini oluşturur ve yöntemlerini çağırır. Sınıflarınız genellikle çerçeveden bazı arayüzler uygular veya bazı sınıflarını devralır, böylece size zaten sizin için yazılmış bazı işlevler sağlar. Ancak bu her zaman böyle değildir. Örneğin, Spring, bu tür sıkı bağlantılardan mümkün olduğunca kaçınmaya çalışır (burada sınıflarınız doğrudan çerçevedeki sınıflara/arabirimlere bağlıdır). Bunu başarmak için ek açıklamaları kullanır. Buna daha sonra döneceğiz. Ancak, Spring'in yalnızca kullanmanız için mevcut olan bir sınıflar ve arabirimler koleksiyonu olduğunu anlamak önemlidir :) Ayrıca, Spring'in yalnızca web uygulamaları için değil, aynı zamanda en yaygın konsol programları için de kullanılabileceğini hemen belirtmek isterim. bunlar hepimize çok tanıdık. Hatta bugün bir tanesini yazacağız. böylece size zaten sizin için yazılmış olan bazı işlevler sağlar. Ancak bu her zaman böyle değildir. Örneğin, Spring, bu tür sıkı bağlantılardan mümkün olduğunca kaçınmaya çalışır (burada sınıflarınız doğrudan çerçevedeki sınıflara/arabirimlere bağlıdır). Bunu başarmak için ek açıklamaları kullanır. Buna daha sonra döneceğiz. Ancak, Spring'in yalnızca kullanmanız için mevcut olan bir sınıflar ve arabirimler koleksiyonu olduğunu anlamak önemlidir :) Ayrıca, Spring'in yalnızca web uygulamaları için değil, aynı zamanda en yaygın konsol programları için de kullanılabileceğini hemen belirtmek isterim. bunlar hepimize çok tanıdık. Hatta bugün bir tanesini yazacağız. böylece size zaten sizin için yazılmış olan bazı işlevler sağlar. Ancak bu her zaman böyle değildir. Örneğin, Spring, bu tür sıkı bağlantılardan mümkün olduğunca kaçınmaya çalışır (burada sınıflarınız doğrudan çerçevedeki sınıflara/arabirimlere bağlıdır). Bunu başarmak için ek açıklamaları kullanır. Buna daha sonra döneceğiz. Ancak, Spring'in yalnızca kullanmanız için mevcut olan bir sınıflar ve arabirimler koleksiyonu olduğunu anlamak önemlidir :) Ayrıca, Spring'in yalnızca web uygulamaları için değil, aynı zamanda en yaygın konsol programları için de kullanılabileceğini hemen belirtmek isterim. bunlar hepimize çok tanıdık. Hatta bugün bir tanesini yazacağız. Spring, bu tür sıkı bağlantılardan mümkün olduğunca kaçınmaya çalışır (burada sınıflarınız doğrudan çerçevedeki sınıflara/arabirimlere bağlıdır). Bunu başarmak için ek açıklamaları kullanır. Buna daha sonra döneceğiz. Ancak, Spring'in yalnızca kullanmanız için mevcut olan bir sınıflar ve arabirimler koleksiyonu olduğunu anlamak önemlidir :) Ayrıca, Spring'in yalnızca web uygulamaları için değil, aynı zamanda en yaygın konsol programları için de kullanılabileceğini hemen belirtmek isterim. bunlar hepimize çok tanıdık. Hatta bugün bir tanesini yazacağız. Spring, bu tür sıkı bağlantılardan mümkün olduğunca kaçınmaya çalışır (burada sınıflarınız doğrudan çerçevedeki sınıflara/arabirimlere bağlıdır). Bunu başarmak için ek açıklamaları kullanır. Buna daha sonra döneceğiz. Ancak, Spring'in yalnızca kullanmanız için mevcut olan bir sınıflar ve arabirimler koleksiyonu olduğunu anlamak önemlidir :) Ayrıca, Spring'in yalnızca web uygulamaları için değil, aynı zamanda en yaygın konsol programları için de kullanılabileceğini hemen belirtmek isterim. bunlar hepimize çok tanıdık. Hatta bugün bir tanesini yazacağız. ) Spring'in yalnızca web uygulamaları için değil, hepimizin çok aşina olduğu en yaygın konsol programları için de kullanılabileceğini de hemen belirtmek isterim. Hatta bugün bir tanesini yazacağız. ) Spring'in yalnızca web uygulamaları için değil, hepimizin çok aşina olduğu en yaygın konsol programları için de kullanılabileceğini de hemen belirtmek isterim. Hatta bugün bir tanesini yazacağız.

Yapı

Ancak Bahar yalnızca belirli bir çerçeve değildir. Aksine, her biri kendi işini yapan birkaç küçük çerçeveye atıfta bulunmak için kullanılan yaygın bir addır. Tembel insanlar için bahar Vakfı, temel kavramlar ve kodlu örnekler.  Bölüm 1 - 2

https://docs.spring.io/spring/docs/4.3.26.RELEASE/spring-framework-reference/htmlsingle/
Şekil 2.1. Spring Framework'e Genel Bakış

Gördüğünüz gibi, Spring modülerdir. Bu, yalnızca uygulamamız için ihtiyaç duyduğumuz modülleri bağlamamıza ve kesinlikle kullanmayacağımız modülleri bağlamamıza olanak tanır. Bildiğim kadarıyla, Spring'in o zamanki rakibini (EJB) geride bırakmasına ve liderliği ele geçirmesine izin veren bu yaklaşımdı. EJB kullanan uygulamalar pek çok bağımlılığı arkalarına sürükledi ve sonuç olarak ağır ve yavaş çıktılar. Resim, Spring Framework'ün birkaç modülden oluştuğunu göstermektedir:
  • Veri Erişimi
  • Çekirdek
  • ve dahası
Bugün ana modülde bulunan bazı kavramlarla tanışacağız: fasulye, bağlam ve diğerleri. Tahmin edebileceğiniz gibi, Veri Erişim modülü verilerle (esas olarak veritabanları) çalışmak için araçlar içerir ve Web modülü bir ağ üzerinde çalışmak içindir (daha sonra tartışılacak olan web uygulamaları oluşturmak dahil). Ek olarak, Spring'i destekleyen kapsamlı bir altyapı var: çerçevenin kendisine resmi olarak dahil olmayan ancak Spring projenize sorunsuz bir şekilde entegre edilen diğer birçok proje (örneğin, ayrıca değinmeyi umduğum Spring Security, bir web sitesinde bir kullanıcının kimliğinin doğrulanması).

Java neden Spring Framework'e sahip?

Eh, modaya uygun, şık ve taze olmasının yanı sıra, Spring'i kullanarak az da olsa beceri kazandığınız anda, artık sahip olmadığınız her türlü işin nasıl olduğunu anlayacaksınız. Yapılması gerekenler ve Spring'in ne kadar iş üstlendiği. Birkaç düzine yapılandırma ayarı satırı yazabilir ve birkaç sınıf yazabilirsiniz ve sonunda çalışan bir projeye sahip olursunuz. Ancak aynı projeyi sade servlet'ler veya soketler ve saf Java'ya dayalı olarak uygulayacak olsaydınız, kaputun altında ne kadar şey olduğunu, ne kadar iş yapıldığını ve ne kadar kod yazmanız gerektiğini merak etmeye başladığınız anda, tüyleriniz diken diken olacak :) Hatta bahar bir nevi sihir olarak anlatılır. Her şeyin yolunda olduğunu gördüğünüzde bunu yaşarsınız, ama aynı zamanda perde arkasında nasıl ve ne kadar iş olduğu hakkında da kabaca bir fikriniz var - bu yüzden eylemde gerçekten bir tür sihir var gibi görünüyor :) Buna sihir demek, her şeyin nasıl birbirine bağlı olduğunu açıklamaya çalışmaktan daha kolay. :) Spring'i çalışmaktan yana olan ikinci argüman, genç geliştiriciler için açık pozisyonların yaklaşık %90'ının (kişisel gözlemlerime dayanarak) Spring'in ne olduğu hakkında bilgi veya en azından genel bir fikir gerektirmesidir.Data, Web MVC, ve Securitymodüller gelişmiş geliştiriciler sunar :) Ama bugün sadece temel bilgilerle ilgili.

DI/IoC

Spring hakkında okumayı denediyseniz, karşılaştığınız ilk şey muhtemelen şu kısaltmalardı: DI/IoC. Şimdi bu makaleye bir ara vermenizi ve bu DZone makalesini okumanızı şiddetle tavsiye ediyorum ! IoC, kontrolün tersine çevrilmesi anlamına gelir. Bir kitaplık kullanmanın, kodunuzda hangi nesne üzerinde hangi yöntemin çağrılacağını belirtmenizi içerdiğini yazarken bundan daha önce bahsetmiştim, ancak bir çerçeve kullanmanın genellikle çerçevenin kodunuzu doğru zamanda çağıracağı anlamına gelir. Başka bir deyişle, bu ikinci durumda, artık kodu/programı yürütme sürecini yönetmiyorsunuz - çerçeve bunu sizin için yapıyor. Kontrolü çerçeveye geçtiniz (kontrolün tersine çevrilmesi). DI, bağımlılık enjeksiyonu anlamına gelir. Bağımlılık enjeksiyonu ile, ana yöntemde cat nesneleri oluşturup bunları yöntemlerinize aktarmazsınız. Bunun yerine, Spring Framework bunları sizin için oluşturur. Basitçe "buraya bir kedi almak istiyorum" gibi bir şey söylersiniz ve çerçeve, yönteminizde size bir kedi verir. Bu kısaltmayı gelecek yazılarda göreceğiz.

Fasulye ve bağlam

İlkbahardaki anahtar kavramlardan biri fasulyedir. Aslında, bu sadece bir sınıfın nesnesidir. 3 nesne gerektiren bir programımız olduğunu varsayalım: kedi, köpek ve papağan. Ve bir sürü yöntemi olan bir sürü sınıfımız var. Bazen bir yöntem için bir kediye ihtiyaç duyarız, bazen farklı bir yöntem için bir köpeğe ihtiyaç duyarız ve bazen yöntemlerimizde hem kediye hem de papağana ihtiyaç duyulur (örneğin, kediyi besleme yöntemi, ha-ha). Yine diğer yöntemler için, üç nesneye de ihtiyaç vardır. Evet, bu üç nesneyi önce main metodunda oluşturup sonra kendi sınıflarımıza ve sonra bu sınıfların içinde ilgili metotlara geçirebiliriz... Ve bu tüm program boyunca böyle devam eder. Ancak, yöntemlerimiz için girdi parametreleri listesini ara sıra değiştirmek istediğimizi de varsayarsak (örneğin, bir şeyi yeniden yazmaya veya yeni işlevler eklemeye karar verirsek), o zaman kodda epeyce değişiklik yapmamız gerekecek. Ve şimdi bu tür 3 değil 300 nesnemiz olduğunu hayal edin. Bir alternatif, tüm nesnelerimizi tek bir listede toplamak olabilir (List<Object>), her yönteme iletin ve ardından yöntemlerin içindeyken gerekli nesneyi alın. Ama program çalışırken, ya bu listeye bir nesne eklenirse ya da daha kötüsü, ya bir nesne silinirse? Bu, listeden nesneleri almak için bir dizin kullandığımız her yöntemi bozma potansiyeline sahiptir. Bu sorunu önlemek için, nesnelerimizi bir listede değil, anahtarın nesnenin adı ve değerin nesnenin kendisi olduğu bir haritada saklamaya karar veririz. Bu, ihtiyacımız olan nesneleri basitçe isimlerini kullanarak almamızı sağlar, örneğin get("parrot") ve yanıt olarak papağan nesnesini alırız. Veya anahtar, nesnenin sınıfı olabilir ve değer, nesnenin kendisi olabilir. Bu durumda nesnenin adını belirtmek yerine, ihtiyacımız olan nesnenin sınıfını belirtebiliriz. Bu da uygun. Veya harita için, bazı yöntemlerin nesneleri adlarına göre aldığı ve diğer yöntemlerin nesneleri sınıflarına göre aldığı bir çeşit sarmalayıcı bile yazabiliriz. Buraya geldiğimiz şeye bir denirSpring Framework'teki uygulama bağlamı . Bağlam, fasulye (nesneler) koleksiyonudur. İhtiyacımız olan bean'i (nesneyi) adıyla, türüyle veya başka yollarla elde etmek için bir bağlama erişiriz. Ek olarak, Spring'in kendisinden ihtiyacımız olan çekirdeği kendi bağlamında aramasını ve onu yöntemimize iletmesini isteyebiliriz. Örneğin, şöyle bir yöntemimiz olduğunu varsayalım:
public void doSomething(Cat cat) {
    ...
}
Spring bu yöntemi çağırdığında cat nesnemizi bağlamından alıp yönteme aktardı. Ama şimdi, bir kediye ek olarak, yöntemimizin bir papağana da ihtiyacı olduğuna karar verdik. Bahar ile hiçbir şey daha kolay olamaz! Basitçe yazıyoruz:
public void doSomething(Cat cat, Parrot parrot) {
    ...
}
Artık Spring, metodumuzu çağırdığında, bir kedi ve bir papağanı geçirmemiz gerektiğini anlıyor, böylece kendi bağlamına gidiyor, bu iki nesneyi alıyor ve onları metodumuza aktarıyor. Kontrolün dizginlerini Spring'e devrederek, nesneleri yaratma ve onları Spring'in çağıracağı yöntemlerimize aktarma sorumluluğunu da devrediyoruz. Bu şu soruyu akla getiriyor: Spring hangi nesneleri (fasulyeleri) yaratacağını nasıl biliyor?

Bir uygulamayı yapılandırma yolları

Bir uygulamayı yapılandırmanın üç ana yolu vardır , yani Spring'e tam olarak hangi nesnelere ihtiyacımız olduğunu söylemenin yolları:
  1. XML yapılandırma dosyaları
  2. Java tabanlı yapılandırma
  3. otomatik yapılandırma
Spring'in yaratıcıları bunlara şu sırayla öncelik veriyor:
  • tercih edilmesi gereken öncelikli yöntem otomatik yapılandırmadır.
  • tüm olası bean'leri doğru bir şekilde yapılandırmak için otomatik yapılandırma kullanılamıyorsa, Java tabanlı yapılandırmayı kullanın (bu, Java kodunu kullanarak nesneler oluşturmayı içerir)
  • ve en düşük öncelikli yöntem, XML yapılandırma dosyalarını kullanan eski moda yöntemdir.
Spring ayrıca bu yöntemleri birleştirmemize izin verir. Örneğin, Spring'in otomatik olarak yapılandırılabilen her şeyi yapılandırmasına izin verin, özel parametrelere ihtiyaç duyduğunuz her yerde Java tabanlı yapılandırmayı kullanın ve tüm eski yapılandırmalar için XML kullanın. Bunların hepsi oldukça esnektir. Yine de, her şey otomatik olarak yapılandırılabiliyorsa, o seçeneği seçin. Yalnızca otomatik yapılandırmayı ve Java tabanlı yapılandırmayı ele alacağım. XML yapılandırmaları, İnternetteki Spring'in hemen hemen her örneğinde kullanılır. Dahası, Java tabanlı yapılandırmanın nasıl çalıştığını anladığınızda, aynı şeyi yapan bir XML dosyasını okumakta sorun yaşamazsınız. Otomatik yapılandırma, yazdığımız sınıfların nesneleri ile çalışmamız gerektiğinde kullanılır. Nesnelerimizden birini oluşturmak çok özel bir mantık gerektiriyorsa, veya otomatik yapılandırma için gerekli ek açıklama ile bir sınıf oluşturamazsak, yapılması gerekenleri yapmak için Java tabanlı yapılandırmayı kullanabiliriz. İçindesonraki bölümde bir Maven projesi oluşturacağız, birkaç ana Spring modülünü bağlayacağız ve ilk fasulyemizi oluşturacağız.
Yorumlar
  • Popüler
  • Yeni
  • Eskimiş
Yorum bırakmak için giriş yapmalısınız
Bu sayfada henüz yorum yok