Bahar AOP, bahar çerçevesinin önemli parçalarından biridir. En temel aşamada, bahar çerçevesi IoC ve AOP'ye dayanmaktadır. İlkbaharın resmi dersinde şöyle bir slayt var:
AOP, çerçevenin en önemli kısımlarından biridir.
İlkbaharda AOP'un nasıl çalıştığını anlamanın kilit noktası, Bahar ile bir Unsur yazdığınızda, çerçevenizi nesneleriniz için bir proxy oluşturarak JDKDynamicProxy
düzenleriz, eğer fasulyeniz bir arayüz uygularsa veya fasulyeniz herhangi bir uygulama yapmazsa CGLIB aracılığıyla arayüz. 3.2 sürümünden önce Spring kullanıyorsanız sınıf yolunuzda cglib 2.2 olması gerektiğini unutmayın. Bahar 3.2'den itibaren işe yaramaz çünkü cglib 2.2 çekirdeğe dahil edildi.
Fasulye oluşturmadaki çerçeve, nesnelerinizi saran ve güvenlik, işlem yönetimi, günlüğe kaydetme ve benzeri gibi kesişen endişeler ekleyen bir proxy oluşturacaktır.
Bu şekilde proxy oluşturma, hangi fasulye ve yöntemlerin proxy olarak oluşturulacağına karar verecek çerçeveyi belirleyen bir nokta ifade için başlayarak uygulanacaktır. Tavsiye, kodunuzdan daha fazla sorumluluk olacaktır. Bu süreçte nokta kesimin yalnızca nihai olarak bildirilmeyen genel yöntemleri yakaladığını unutmayın.
Şimdi, Bahar AOP'de Aspects'in dokuma konteyneri başlangıçta konteyner tarafından gerçekleştirilecekken, AspectJ'de bunu kodunuzu bayt kodu modifikasyonu yoluyla bir derleme ile gerçekleştirmelisiniz. Bu nedenle bence Bahar yaklaşımı AspectJ'den daha basit ve yönetilebilir.
Öte yandan, Bahar AOP ile AOP'nin tüm gücünü kullanamazsınız çünkü uygulama kodlarınızda değişiklik yapılarak değil, proxy üzerinden yapılır.
AspectJ'de olduğu gibi, SpringAOP'ta yükleme zamanı dokuma kullanabilirsiniz. İlkbaharda bir ajan ve özel konfigürasyonlarla @EnabledLoadWeaving
veya XML ile uygulandığında bu özellikten yararlanabilirsiniz . Ad alanını örnek olarak kullanabilirsiniz. Ancak Bahar AOP'de tüm vakalara müdahale edemezsiniz. Örneğin, new
komut Bahar AOP'de desteklenmez.
Ancak Spring AOP'de aspectof
, yay konfigürasyonu çekirdeğindeki fabrika yöntemini kullanarak AspectJ kullanımından faydalanabilirsiniz .
Spring AOP'un temel olarak kaptan oluşturulan bir proxy olması nedeniyle, AOP'yi sadece bahar fasulyesi için kullanabilirsiniz. AspectJ ile bu özelliği tüm fasulyelerinizde kullanabilirsiniz. Diğer bir karşılaştırma noktası, hata ayıklama ve kod davranışının öngörülebilirliğidir. Bahar AOP ile, iş tüm Java derleyiciden önceden oluşturulur ve yönleri Bahar fasulyeniz için proxy oluşturmak için çok güzel bir yoldur. AspectJ'de kodu değiştirirseniz, daha fazla derlemeye ihtiyacınız vardır ve özelliklerinizin nerede dokunduğunu anlamak zor olabilir. İlkbaharda dokumayı kapatmak daha basittir: İlkbaharda, yönü yapılandırmanızdan kaldırır, yeniden başlatır ve çalışır. AspectJ'de kodu yeniden derlemelisiniz!
Yükleme süresi dokumasında AspectJ, Spring'den daha esnektir çünkü Spring, AspectJ'nin tüm seçeneklerini desteklemez. Ama bence bir fasülyenin yaratılma sürecini değiştirmek istiyorsanız, daha iyi bir yol, yeni operatörünüzün davranışını değiştiren bir yönün yükleme zamanı dokuma ile değil, bir fabrikadaki özel girişin yönetilmesidir.
Umarım AspectJ ve Spring AOP'un bu panoramik görüntüsü iki iksirin farkını anlamanıza yardımcı olur