Bahar çerçevesi ne yapar? Kullanmalı mıyım? Neden ya da neden olmasın?


237

Bu yüzden Java'da yepyeni bir projeye başlıyorum ve Spring'i kullanmayı düşünüyorum. Neden Bahar'ı düşünüyorum? Çünkü birçok insan Spring'i kullanmam gerektiğini söyledi! Cidden, ne zaman insanlar baharın tam olarak ne olduğunu veya ne yaptığını açıklamaya çalıştım, bana asla doğru bir cevap veremezler. SpringSource sitesindeki tanıtımlara baktım, ya gerçekten karmaşık ya da gerçekten öğretici odaklılar ve hiçbiri bana neden kullanmam gerektiği ya da hayatımı nasıl kolaylaştıracağım hakkında iyi bir fikir vermedi. Bazen insanlar beni daha da şaşırtan "bağımlılık enjeksiyonu" terimini atıyorlar, çünkü bu terimin ne anlama geldiğiyle ilgili farklı bir anlayışa sahip olduğumu düşünüyorum.

Her neyse, işte geçmişim ve uygulamam hakkında biraz:

Bir süredir Java'da geliştiriliyor, arka uç web geliştirme yapıyorum. Evet, bir ton birim testi yapıyorum. Bunu kolaylaştırmak için, tipik olarak (en azından) bir yöntemin iki versiyonunu yapıyorum: Biri örnek değişkenleri kullanan, diğeri ise sadece metoda iletilen değişkenleri kullanan. Örnek değişkenleri kullanan, diğerini çağırır, örnek değişkenleri sağlar. Birim testine gelince, Mockito'yu nesneleri alay etmek için kullanıyorum ve daha sonra örnek değişkenleri kullanmayan metodu çağırıyorum. "Bağımlılık enjeksiyonunu" her zaman anladığım şey buydu.

Benim app CS açısından, oldukça basittir. Küçük bir proje, 1-2 geliştirici ile başlamak. Çoğunlukla CRUD tipi işlemler bir araya getirilmiş bir arama grubuyla. Temel olarak bir dizi RESTful web servisi, bir web ön ucu ve daha sonra bazı mobil istemciler. Ön tarafı doğrudan HTML / CSS / JS / JQuery ile yapmayı düşünüyorum, bu yüzden JSP'yi kullanmak için gerçek bir plan yok. Hazırda Bekletme modunu ORM olarak ve Web hizmetlerini uygulamak için Jersey'i kullanma.

Kodlamaya çoktan başladım ve alışveriş yapmak ve birilerinin yatırım yapmak isteyip istemediğini görmek için bir demo almaya gerçekten istekliyim. Öyleyse, açıkçası zaman esastır. Spring'in oldukça iyi bir öğrenme eğrisi olduğunu ve artı gibi vebadan kaçınmaya çalıştığım bir sürü XML yapılandırmasını gerektirdiğini düşünüyorum. Ama eğer hayatımı kolaylaştırabilirse ve (özellikle) daha hızlı gelişme ve test yapabilirse, mermiyi ısırmaya ve Baharı öğrenmeye istekliyim.

Yani lütfen. Beni eğit. Bahar kullanmalı mıyım? Neden ya da neden olmasın?


10
Bence bir süre denemeye ihtiyacın olduğunu, beğenip beğenmediğini ve projen için uygun olup olmadığını görmen gerekiyor. Şahsen ben nefret ediyorum.
Richard,

1
XML veya ek açıklamaları kullanabilirsiniz; Spring'in konfigürasyon zihniyeti konusunda bir sözleşme üstlendiğini unutmayın. Bu, mutlaka adres etmeniz gereken öğelerin bir kontrol listesi değildir .
Aaron McIver

14
Bu sorunun oldukça geniş olduğu doğru olsa da, açık kalması gerektiğini düşünüyorum. “Bahar orta ölçekli bir projeye ne gibi yararlar sağlıyor?” Olarak okudum ve bu iyi bir soru.
sleske

1
Favori teknik kitabım: Spring in Action, Üçüncü Baskı, Craig Walls tarafından okunmasını şiddetle tavsiye ederim. Harika bir okuma ve program şeklini değiştirecek.
pazartesi

4
Enterprise Java'yı göz önünde bulundurarak, Spring'in yapmadıklarını cevaplamak daha kolay ...
m3th0dman 10:15

Yanıtlar:


108

Bahar çerçevesi ne yapar? Kullanmalı mıyım? Neden ya da neden olmasın?

Bahar, farklı bileşenleri birbirine "bağlamanıza" yardımcı olan bir çerçevedir. Çok fazla bileşene sahip olduğunuz ve bunları farklı şekillerde birleştirmeye karar verebileceğiniz veya farklı ayarlara veya ortamlara bağlı olarak bir bileşenin bir başkasıyla değiştirilmesini kolaylaştırmak isteyebilirsiniz.

"Bağımlılık enjeksiyonunu" her zaman anladığım şey buydu.

Farklı bir tanım önerebilirim:

“Nesnelerinizi, ihtiyaç duydukları şeyleri sağlamak için dışarıdan gelen bir güce güvenecekleri şekilde tasarlayın, bu bağımlılıkların her zaman normal işlerini yapmalarını istemeden önce bu bağımlılıkların her zaman enjekte edileceği beklentisi ile .”

Şunu karşılaştırın: "Her nesne, ortaya çıktıktan sonra ihtiyaç duyduğu her şeyi ve herkesi bulmaktan sorumludur."

bir sürü XML yapılandırmasını gerektiriyor gibi görünüyor

Peki, XML (veya ek açıklama tabanlı) öğelerinin çoğu, Spring öğelerine şöyle söylüyor:

  • Birisi "HammerStore" istediğinde, bir örnek oluşturmanı example.HammerStoreve iade etmeni istiyorum . Sadece bir mağaza olması gerektiğinden örneği bir dahaki sefere önbelleğe al.
  • Birisi "SomeHammer" istediğinde, kendinden bir "HammerStore" sormanı istiyorum ve mağazanın makeHammer()yönteminin sonucunu geri getirmeni istiyorum . Do not bu sonucu önbelleğe.
  • Birisi "SomeWrench" için sorduğunda, bir örnek oluşturmanı istiyorum example.WrenchImpl, Yapılandırma ayarını kullan gaugeAmountve örneğin setWrenchSize()özelliğine koy . Sonucu önbelleğe almayın.
  • Birisi "LocalPlumber" için sorduğunda, ben senin bir örneğini oluşturmak istiyorum example.PlumberImpl. "Pedro" dizisini setName()yöntemine, bir "SomeHammer" setHammer()yöntemini ve yöntemine bir "SomeWrench" koyun setWrench(). Sonucu döndürün ve sadece bir tesisatçıya ihtiyacımız olduğu için sonucu daha sonra önbellekleyin.

Bu şekilde, Spring, bağlantı bileşenlerinizi bağlamanıza, etiketlemenize, yaşam çevrimlerini / önbelleğe almayı denetlemenize ve yapılandırmaya dayalı davranışı değiştirmenize olanak tanır.

[Test Etmeyi] kolaylaştırmak için Genelde bir yöntemin iki versiyonunu yaparım: biri örnek değişkenleri kullanır ve diğeri ise yalnızca metoda iletilen değişkenleri kullanır.

Bu benim için fazla bir fayda sağlanmadığı için fazla masrafa benziyor. Bunun yerine, örnek değişkenlerinizi protectedveya paket görünürlüğünü sağlayın ve birim testlerini aynı com.mycompany.whateverpaket içinde bulun . Bu şekilde, test sırasında istediğiniz zaman örnek değişkenlerini inceleyebilir ve değiştirebilirsiniz.


65

İlk olarak, bağımlılık enjeksiyonu nedir?

Basit. Bir sınıfınız var, özel bir alanı var (null olarak ayarlanmış) ve bu alan için değer sağlayan bir genel ayarlayıcı ilan ediyorsunuz. Başka bir deyişle, sınıfın bağımlılığı (alan) dış bir sınıf tarafından (ayarlayıcı aracılığıyla) enjekte ediliyor. Bu kadar. Büyülü bir şey değil.

İkincisi, Spring XML olmadan kullanılabilir (veya çok az)

Spring 3.0.5.GA veya daha yükseği ile birlikte dalırsanız, bağımlılık enjeksiyon desteğini JDK6 + 'dan kullanabilirsiniz. Bu, @Componentve @Resourceek açıklamalarını kullanarak bağımlılıkları bağlayabileceğiniz anlamına gelir .

Neden Spring'i kullanıyorsun?

Açıkçası, bağımlılık enjeksiyonu çok kolay birim testini desteklemektedir, çünkü tüm sınıflarınız önemli bağımlılıklar için belirleyicilere sahiptir ve bunlar gerekli davranışı sağlamak için favori alaycı çerçevenizi kullanarak kolayca alay edilebilir.

Bunun yanı sıra, Spring, aynı zamanda JEE standart teknolojilerini çalışmak için bir esinti yapmak için temel sınıflar olarak işlev gören birçok şablon sunar. Örneğin, JdbcTemplate, JDBC ile iyi çalışır, JpaTemplate, JPA ile iyi şeyler yapar, JmsTemplate, JMS'yi oldukça basitleştirir. RestTemplate basitliği ile harika. Örneğin:

RestTemplate restTemplate = new RestTemplate();
MyJaxbObject o = restTemplate.getForObject("https://secure.example.org/results/{param1}?param2={param2}",MyJaxbObject.class,"1","2");

ve bitti. Parametreler enjekte edilir ve sadece MyJaxbObject için JAXB ek açıklamaları sağlamanız gerekir. Maven JAXB eklentisini kullanarak onları bir XSD'den otomatik olarak oluşturduysanız, bu hiçbir zaman almaz. Orada bir döküm olmadığını ve bir mareşal ilan etmeye gerek olmadığını unutmayın. Hepsi senin için yapıldı.

Bahar harikası hakkında sonsuza kadar üzülebilirdim, ama belki de yapılacak en iyi şey, işlemleri destekleyen enjekte edilmiş bir DAO'dan veri pompalamak için RESTful bir web servisini bağlamaya çalıştığınız basit bir kod artışı denemektir.


4
evet RestTemplate oldukça harika. Atıp 2-3 satırla değiştirebildiğim 100 satır kod gibi.
Kevin

11
Nitpick için: Bağımlılık Enjeksiyonu, yapıcı tabanlı yaklaşımı da içerir. Mutlaka ayarlayıcı olması gerekmez.
Darien,

28

Her şeyden önce, bağımlılık enjeksiyonu anlayışınız temelde yanlış değildir, ancak çoğu insan terimi kullandıklarında ne demek istediğinden oldukça farklıdır. Tarif ettiğiniz, test edilebilirliği elde etmek için oldukça garip ve sıradışı bir yoldur. Ondan uzaklaşmanızı tavsiye ederim, çünkü diğer geliştiriciler bu tür bir kod tarafından şaşırtılacak.

Genel olarak anlaşıldığı gibi (ve Spring tarafından uygulanan) bağımlılık enjeksiyonu, bir sınıfın sahip olduğu bağımlılıkların (örneğin bir JDBC Veri Kaynağı) sınıf tarafından alınmadığı, ancak örnek oluşturulduğunda bir konteyner tarafından "enjekte edildiği" anlamına gelir. Dolayısıyla, Veri Kaynağını kullanan her yöntemin iki sürümüne sahip değilsiniz; bunun yerine, "gerçek" Veri Kaynağının enjekte edildiği ve bir sahte maddenin enjekte edildiği bir bağımlılık enjeksiyon yapılandırmasına sahipsiniz. Veya, enjeksiyon yapıcı veya alıcı aracılığıyla gerçekleşirse, test kodu enjeksiyonu açıkça yapabilir.

İkincisi, Bahar, temel işlevsellik olmasına rağmen, yalnızca bağımlılık enjeksiyonudur. Ayrıca, ihtiyaç duyabileceğiniz bildirim işlemleri, iş planlaması, kimlik doğrulaması ve bir dizi başka işlevsellik (tam teşekküllü bir MVC web çerçevesi dahil) sağlar. Aynı işlevselliği sağlayan başka çerçeveler de var, ancak Spring dışında, yalnızca Java EE hepsine entegre oldu.


OP,
DI'yi

19

Neden bahar kullanmak istiyorsun, http://www.wrox.com/WileyCDA/Section/Why-Use-the-Spring-Framework-.id-130098.html adresinden okuyabilirsiniz.

Özetle :

  • J2EE uygulamaları aşırı miktarda "tesisat" kodu içerme eğilimindedir. Pek çok kod incelemesi, art arda hiçbir şey yapmayan yüksek oranda bir kod ortaya çıkarmaktadır: JNDI arama kodu, Nesneleri Aktar, JDBC kaynaklarını edinmek ve serbest bırakmak için blokları denemek / yakalamak. . . . Bu tür bir tesisat kodunun yazılması ve bakımı, uygulamanın iş alanına odaklanması gereken kaynaklar üzerinde büyük bir boşalma olduğunu kanıtlar.

  • Birçok J2EE uygulaması bunun uygun olmadığı yerlerde dağıtılmış nesne modeli kullanır. Bu, aşırı kod ve kod çoğaltmanın ana nedenlerinden biridir. Aynı zamanda birçok durumda kavramsal olarak yanlış; dahili olarak dağıtılan uygulamalar ortak yerleştirilmiş uygulamalardan daha karmaşıktır ve çoğu zaman daha az performans gösterir. Tabii ki, işletme gereksinimleriniz dağınık bir mimari gerektiriyorsa, dağıtılmış bir mimari uygulamanız ve meydana gelen değişmeleri kabul etmeniz gerekir (ve Spring, bu gibi senaryolarda yardımcı olacak özellikler sunar). Ancak bunu zorlayıcı bir sebep olmadan yapmamalısınız.

  • EJB bileşen modeli gereğinden fazla karmaşıktır. EJB, J2EE uygulamalarında iş mantığını uygularken karmaşıklığı azaltmanın bir yolu olarak tasarlandı; pratikte bu amaçta başarılı olamadı.

  • EJB fazla kullanılmış. EJB, esas olarak dahili olarak dağıtılmış işlemsel uygulamalar için tasarlanmıştır. Neredeyse tüm önemsiz olmayan uygulamalar işlemsel olsa da, dağıtım, temel bileşen modelinde oluşturulmamalıdır.

  • Pek çok "J2EE tasarım deseni" aslında tasarım deseni değildir, ancak teknoloji sınırlamaları için geçici çözümlerdir. Dağıtımın aşırı kullanımı ve EJB gibi karmaşık API'lerin kullanılması birçok sorgulanabilir tasarım deseni oluşturmuştur; bunları eleştirel olarak incelemek ve daha basit, daha üretken yaklaşımlar aramak önemlidir.

  • J2EE uygulamaları ünite testi zordur. J2EE API'leri ve özellikle EJB bileşen modeli, çevik hareket başlamadan önce tanımlandı. Bu nedenle tasarımları birim test kolaylığı göz önüne almaz. Hem API'ler hem de örtük sözleşmeler sayesinde, EJB ve diğer birçok J2EE API'sine dayalı uygulamaları bir uygulama sunucusu dışında test etmek şaşırtıcı bir şekilde zordur. Yine de, bir uygulama sunucusu dışında birim test yapmak, yüksek test kapsamı elde etmek ve bir veritabanına bağlantı kaybı gibi birçok hata senaryosunu yeniden oluşturmak için şarttır. Geliştirme veya bakım sürecinde testlerin hızlı bir şekilde yapılmasını sağlamak ve yeniden dağıtım için bekleyen verimsiz zamanı en aza indirgemek de çok önemlidir.

  • Bazı J2EE teknolojileri başarısız oldu. Buradaki ana suçlu, üretkenlik ve nesne yönelimi üzerindeki kısıtlamaları konusunda çok az eksiklik gösteren kanıtlanmış varlıklardır.


13

Eskiden sadece Java, Servlets ve JSP, html ve xml, JDBC API kullanarak basit, verimli, hızlı uygulamalar ve web servisleri yazdık. Yeterince iyiydi; JUnit test etmek için iyi bir araçtu. Kurallarımızın işe yaraması için çok rahatladık.

Hazırda Bekletme SQL'i basitleştirmek ve Java tablolarıyla veritabanı tablolarının gerçek eşlenmesini sağlamak için hiyerarşik ilişkilerin Nesne İlişkileri Eşlemesi veya ORM olarak adlandırdığımız şekilde yansıtılmasını sağlamak için ortaya çıktı. Onu sevdim. Özellikle, ResultSet'i bir Java nesnesine veya veri türüne geri döndürmek zorunda olmadığımızı.

Struts, Model View Controller modelini Web uygulamalarımıza eklemek için ortaya çıktı, iyi oldu.

EJB'ler büyük bir ek yük oldu ve acı ve ek açıklamalar kodun tavuk kaşığı gibi görünmesini sağladı ve şimdi Spring bize masum insanlara sıkıştı. Bu sadece bana aşırı geliyor gibi görünüyor.

Mesela şimdi basit jdbc url'imizi paketliyoruz, kullanıcı, önce jdbc.properties'e, daha sonra kış uykusu özelliklerine, sonra da Spring fasulye'ye üçüncü kez geçiyoruz!

Bütün bunlara karşı, ihtiyacınız olan bir yerde, saf java'da gösterildiği kadar basit bir bağlantı almayı düşünün; bu, Spring ile tüm bu sıcak hava olaylarından geçtikten sonra gerçekten yaptığımız şeydir:

Connection connection = DriverManager.getConnection(url, user, pass);

Bu, kendi başına açıklayıcı olup, etrafında büyük bir tur olduğunu ve etrafını saran bir başka şey yapmadan hızlı ve kolay bir şey yapmak için yuvarlak ve yuvarlak bir şekilde sarılmasını sağlar. Ton ve tonlarca hediye kağıdını gerçekte sakladığınız küçük ve hoş bir hediyenin etrafına sarmak gibi.

Başka bir örnek, toplu güncellemedir. Spring ile, JdbcTemplate'i toplu güncelleme yapmak için kullanmadan önce ara yüzleri oldukça az sayıda sınıf içeren bir araya getirdi. Düz jdbc ile basitçe:

Statement statement = connection.createStatement();
statement.addBatch(sqlquery);
statement.executeBatch();

Bundan daha basit veya daha hızlı olamaz.

Bu çerçeveyi desteklemiyorum. Üzgünüm. Kim yeryüzünde birşeye ihtiyaç duydukları her zaman enjeksiyon yapmak ister?


6
bu kod basittir, ancak taşıma işleminiz nerede tanımlanır ve nasıl test edersiniz? Her iki şey de baharda daha kolay hale gelir. Ayrıca, java kodunu doğrudan bir db bağlantısına bağlanır, bağlantı URL'lerini ve parolalarını harici olarak kaydetmezseniz, bu durum baharda daha da kolaylaşır.
NimChimpsky

Bu cevabı için +1, yukarıdaki yorumu ele almak için, insan kendi hafif tasarım desenlerinizi (GOF), bağlantı havuzlaması için singleton, veritabanı Nesnesine sql (string) ve değerleri (array) sağlayan bir proxy sınıfı (hangi yöntemi) kullanır? , http yöntemine göre değişir), dbobject, bağlantı havuzunu, işlemleri vb. Tüm modüllerde bir nesne kullanımı, hiç kimse aşırı kazan plakası kodu gerektirmez. Proxy sınıfı ve dbobject üzerindeki birim test ayarlarının yapıldığı bonus.
user2727195

İlkbahar-Veri-JPA’ya bakın Bir pojoyu bir şirkete not verin, bir arayüz uygulayın ve findHammerByWeight () gibi makul isimler kullanarak yöntem imzalarını tanımlayın ve spring, diğer tüm işletme servislerinizde veya denetleyici sınıflarınızda kullanabileceğiniz enjekte edilebilir bir depo vererek sizin için yöntemleri uygular. .
mancini0

13

Bahar çerçevesi ne yapar?

Bahar bugün olduğu gibi sadece basit bir çerçeve olarak bilinen şey değil, tam bir ekosistemdir.

Bahar ekosisteminin kapsadığı konular:

  • Yay Çerçevesi (örneğin, Bağımlılık Enjeksiyonu, AOP ...)

  • Bahar bulut

  • Bahar veri

  • Bahar Güvenliği

  • Bahar toplu

  • Bahar sosyal

Ekosistemin tam kapsamı için buraya bakınız . Projeleri hızlıca seçmek mümkündür, böylece DI için Google Guice ve güvenlikle ilgili işleri yürütmek için Spring Security kullanabilirsiniz. Tüm ekosisteme girmek zorunda değilsiniz.

Bahar çerçevesinin kendisi bugün esas olarak

  • Bağımlılık Enjeksiyonu

  • Spring'in bildirimsel işlem yönetimini içeren Açı Yönelimli Programlama

  • Bahar MVC web uygulaması ve RESTful web servis çerçevesi

  • JDBC, JPA, JMS için temel destek

Kaynak spring.io

Genel olarak, Spring'in uygulama geliştirme döngüsünüzü iyileştirmeye veya hızlandırmaya yardımcı olabilecek, kodlanmış, uygulanmış bir Desenler ve Uygulamalar koleksiyonu olduğunu söyleyebilirsiniz.

Bunun için (çekirdek çerçeve) en çok bilinen, bağımlılık enjeksiyon alanındaki yetenekleridir . Yayın kendisi, kontrol kabının ters çevrilmesi veya kısa IoC kabı olarak adlandırılan ya da kabı daha kısa olanlara sahiptir (bunun için "yay" bazen eşanlamlıdır)

Bağımlılık enjeksiyonu nedir?

Bağımlılık enjeksiyonu, nesnenizin harici bir mekanizma yoluyla diğer nesnelere her bağımlılığı alacağı anlamına gelir.

Diyelim ki, bir arabanız var, tipik bir şekilde uygulandı:

public class Car {

    Engine e;

    public Car() { 
        e = new Engine(); 
    }

}

Araba nesnesi bir motora bağlıdır. Motor bir otomobil üyesi olarak uygulandığından, örneğin bir test motoru için değiştirilemez.

Artık bağımlılık enjeksiyonu devreye giriyor:

public class Car {

    Engine e;

    public Car(Engine e) { 
        this.e = e; 
    }

}

Ondan sonra motorları değiştirebilirsin. Yukarıda gördüğünüze yapıcı enjeksiyon denir . Setter- enjeksiyon veya yöntem- enjeksiyon gibi başka türler de vardır . Spring size bu konuda nasıl yardımcı olur? Yay, bileşenlerin ek açıklama ile enjekte edilmesini sağlar ve enjekte edilen @Autowirednesnenin kablolamasını otomatik olarak yapar - enjekte etmek istediğiniz bileşenin kendi bağımlılıklarına sahip olması muhtemeldir. Enjekte edilebilirler - yani - işaretli@Component

public class Car {

    Engine e;

    @Autowired
    public Car(Engine e) { 
        this.e = e; 
    }

}

Ancak bu, Spring'in sunduğu özelliklerden sadece bir tanesi.

Bahar kullanmalı mıyım? Neden ya da neden olmasın?

Bahar çok müdahaleci olmadığından ve baharı kullanmayı düşünmeniz gereken birçok yardımcı madde sunduğundan. Özellikle yeni projeler için Spring Boot çok çekici. start.spring.io bir kullanımı kolay, sunar point'n'click Başlamak için bir proje şablonu oluşturmak için -Interface. curlBir şablon almak için kullanmak bile mümkündür :

curl start.spring.io

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/

:: Spring Initializr ::  https://start.spring.io

This service generates quickstart projects that can be easily customized.
Possible customizations include a project's dependencies, Java version, and
build system or build structure. See below for further details.

The services uses a HAL based hypermedia format to expose a set of resources
to interact with. If you access this root resource requesting application/json
as media type the response will contain the following links:
+-----------------+-----------------------------------------+
| Rel             | Description                             |
+-----------------+-----------------------------------------+
| gradle-build    | Generate a Gradle build file            |
| gradle-project  | Generate a Gradle based project archive |
| maven-build     | Generate a Maven pom.xml                |
| maven-project * | Generate a Maven based project archive  |
+-----------------+-----------------------------------------+

...

Öte yandan, kıvılcım veya dropwizard gibi çerçeveler hızlı web uygulaması oluşturma için iyi bir başlangıç ​​noktası sunar.


1
Çok bilgilendirici cevap!
GOXR3PLUS

Kabul, çok iyi bir cevap. OP, sana sempati duyuyorum. Ayrıca birkaç kişiyi bana bir XML dosyası ve 2 kat dolaylı indirgeme kodu ekleyerek "basitleştirdikleri" kodları gösterdim, böylece yapıcıyı bir sınıfa çağırabilirler. gerçekten iyi bir sunum ve sonuçta faydaların ve sakıncaların nerede olduğu netleşecek
Adam Hughes

4

Web uygulamanızı işlevsel hale getirmek için Java ile yazılmış pek çok şey içeren bir çerçevedir (örneğin uluslararasılaştırma desteği). Ayrıca, uygulamanızı katmanlar halinde yapılandırmak için iyi bir yol sağlar. Kullan, uzun vadede çok fazla zaman kazandıracak.

Bahar hakkında bilgi edinmek için iyi bir kitap: Uzman Bahar MVC ve Web Akışı

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.