Uzun zamandır hepimizin kullandığı xml dosyaları gibi "merkezi, bildirimsel bir yapılandırmaya" sahip olmanın bir değeri olduğuna inandım. Sonra dosyalardaki şeylerin çoğunun yapılandırma olmadığını fark ettim - geliştirmeden sonra hiçbir yerde değişmedi. Sonra fark ettim ki "merkezileştirilmiş" sadece oldukça küçük sistemlerde bir değere sahiptir - sadece küçük sistemlerde bir bütün olarak bir yapılandırma dosyasını görüntüleyebileceksiniz . Ve aynı "kablolar" çoğunlukla koddaki bağımlılıklar tarafından çoğaltıldığında kablolamayı bir bütün olarak anlamanın değeri nedir? Bu yüzden tuttuğum tek şey, hala bir tür bildirici olan meta verilerdir (ek açıklamalar). Bunlar çalışma zamanında asla değişmez ve asla "yapılandırma" veri anında değişecek - bu yüzden kodda tutmak güzel olduğunu düşünüyorum.
Tam otomatik kablolamayı olabildiğince kullanıyorum. Onu seviyorum. Silah noktasında tehdit edilmediği sürece eski tarz ilkbahara geri dönmeyeceğim. Tamamen tercih etme nedenlerim @Autowired
zamanla değişti.
Şu anda, otomatik kablolamayı kullanmanın en önemli nedeninin sisteminizde izlenecek daha az bir soyutlama olduğunu düşünüyorum. "Fasulye adı" etkin bir şekilde kayboldu. Fasulye adının sadece xml nedeniyle var olduğu ortaya çıkıyor. Böylece soyut indirimlerden oluşan tam bir katman (fasulye adı "foo" yu fasulyenin "çubuğuna" bağlarsınız) kaybolur. Şimdi "Foo" arayüzünü doğrudan fasulyeme bağlarım ve uygulama çalışma zamanı profiline göre seçilir. Bu, bağımlılıkları ve uygulamaları izlerken kodla çalışmama izin veriyor . Kodumda otomatik kablolu bir bağımlılık gördüğümde sadece IDE'mde "uygulamaya git" tuşuna basabilirim ve yukarıda bilinen uygulamalar listesi gelir. Çoğu durumda sadece bir uygulama vardır ve ben doğrudan sınıfa giriyorum. Yapabilmek' ne uygulama kullanılıyor (Xml kablolama ile tersi gerçeğe daha yakın olduğunu iddia ediyorum - komik bakış açınızı nasıl değiştirir!)
Şimdi bunun çok basit bir katman olduğunu söyleyebiliriz, ancak sistemlerimize eklediğimiz her soyutlama katmanı karmaşıklığı artırır . Gerçekten xml hiç çalıştığım herhangi bir sisteme herhangi bir gerçek değer kattığını sanmıyorum.
Şimdiye kadar çalıştığım çoğu sistemin üretim çalışma ortamı için yalnızca bir yapılandırması var . Test ve benzeri için başka yapılandırmalar olabilir.
Tam otomatik kablolamanın baharın yakut rayları olduğunu söyleyebilirim: Çoğu kullanım vakasının takip ettiği normal ve ortak bir kullanım modeli olduğu fikrini kucaklar. XML yapılandırmasıyla , amaçlanabilecek / edilmeyebilecek birçok tutarlı / tutarsız yapılandırma kullanımına izin verirsiniz . Ben çok fazla xml yapılandırma tutarsızlıklar ile denize gitmek gördüm - kod ile birlikte refactored olsun? Düşünmedim. Bu varyasyonlar bir nedenden dolayı mı? Genellikle hayır.
Yapılandırmamızda niteleyicileri çok az kullanıyoruz ve bu durumları çözmek için başka yollar bulduk. Bu, karşılaştığımız açık bir "dezavantaj" dır: Kodlamayı otomatik kablolama ile daha sorunsuz etkileşime sokmak için biraz değiştirdik: Bir müşteri havuzu artık genel Repository<Customer>
arayüzü uygulamıyor ancak genişleyen bir arayüz CustomerRepository
oluşturuyoruz Repository<Customer>
. Bazen alt sınıfa gelince bir iki numara daha vardır. Ancak genellikle bizi daha güçlü yazma yönüne yönlendirir, ki bulduğum neredeyse her zaman daha iyi bir çözümdür.
Ama evet, çoğunlukla baharın yaptığı belirli bir DI stiline bağlısınız. Bağımlılıklar için artık kamu ayarlayıcıları bile yapmıyoruz (Yani kapsülleme / bilgi gizleme bölümünde +1 olduğumuzu iddia edebilirsiniz) Sistemimizde hala bazı xml'lerimiz var, ancak xml temel olarak sadece anomalileri içeriyor. Tam otomatik kablolama xml ile güzel bir şekilde bütünleşir.
Şimdi ihtiyacımız olan tek şey @Component
, @Autowired
ve geri kalanının bir JSR'ye ( JSR-250 gibi ) dahil edilmesi için, bu yüzden bahar ile bağlanmak zorunda değiliz. Bu şeyler geçmişte gerçekleşiyor ( java.util.concurrent
şeyler akla yayılıyor), bu yüzden bu tekrar olsaydı tamamen şaşırmazdım.