Kök ve çocuk bağlamları Daha fazla okumadan önce lütfen şunu anlayın -
Bahar aynı anda birden fazla içeriğe sahip olabilir. Bunlardan biri kök bağlam olacak ve diğer tüm bağlamlar alt bağlam olacaktır.
Tüm alt bağlamlar kök bağlamda tanımlanan çekirdeklere erişebilir; ama tam tersi doğru değildir. Kök bağlam, alt bağlam çekirdeklerine erişemez.
ApplicationContext:
applicationContext.xml, her web uygulaması için kök içerik yapılandırmasıdır. Spring applicationContext.xml dosyasını yükler ve tüm uygulama için ApplicationContext'i oluşturur. Her bir web uygulaması için yalnızca bir uygulama içeriği olacaktır. ContextConfigLocation parametresini kullanarak web.xml dosyasında bağlam yapılandırma dosyası adını açıkça bildirmezseniz, Spring WEB-INF klasörü altında applicationContext.xml dosyasını arar ve bu dosyayı bulamazsa FileNotFoundException öğesini atar.
ContextLoaderListener Kök uygulama bağlamı için gerçek başlatma işini gerçekleştirir. Bir "contextConfigLocation" bağlam parametresini okur ve değerini bağlam örneğine iletir ve bunu, herhangi bir sayıda virgül ve boşlukla ayrılabilecek potansiyel olarak birden fazla dosya yoluna ayrıştırarak, örneğin “WEB-INF / applicationContext1.xml, WEB-INF / applicationContext2.xml”. ContextLoaderListener isteğe bağlıdır. Sadece burada bir noktaya değinmek için: Bir Spring uygulamasını ContextLoaderListener'ı yapılandırmadan, sadece temel bir minimum web.xml dosyası ile DispatcherServlet'i yapılandırmadan başlatabilirsiniz.
DispatcherServlet DispatcherServlet temel olarak yapılandırılmış URL modeliyle eşleşen gelen web isteklerini işlemek olan bir Servlet'dir (HttpServlet'i genişletir). Gelen bir URI alır ve doğru denetleyici ve görünüm kombinasyonunu bulur. Yani ön kontrolör.
Yay yapılandırmasında bir DispatcherServlet tanımladığınızda, contextConfigLocation özniteliğini kullanarak denetleyici sınıflarının girişlerini, görünüm eşlemelerini vb. İçeren bir XML dosyası sağlarsınız.
WebApplicationContext ApplicationContext dışında, tek bir web uygulamasında birden fazla WebApplicationContext olabilir. Basit bir deyişle, her bir DispatcherServlet tek bir WebApplicationContext ile ilişkilendirilir. xxx-servlet.xml dosyası DispatcherServlet'e özgüdür ve bir web uygulamasında istekleri işlemek için birden fazla DispatcherServlet yapılandırılmış olabilir. Bu tür senaryolarda, her DispatcherServlet'in ayrı bir xxx-servlet.xml yapılandırması olacaktır. Ancak, applicationContext.xml tüm sunucu uygulaması yapılandırma dosyaları için ortak olacaktır. Spring, varsayılan olarak webapps WEB-INF klasörünüzden “xxx-servlet.xml” adlı dosyayı yükler; burada xxx, web.xml içindeki sunucu uygulamasıdır. Bu dosya adının adını değiştirmek veya konumu değiştirmek isterseniz, contextConfigLocation ifadesine param adı olarak attempt-param ekleyin.
Karşılaştırma ve aralarındaki ilişki:
ContextLoaderListener vs DispatcherServlet
ContextLoaderListener kök uygulama içeriği oluşturur. DispatcherServlet girdileri, sunucu uygulaması girişi başına bir alt uygulama bağlamı oluşturur. Alt bağlamlar, kök bağlamda tanımlanan çekirdeklere erişebilir. Kök bağlamındaki fasulye, çocuk bağlamında (doğrudan) fasulyeye erişemez. Tüm bağlamlar ServletContext'e eklenir. Kök içeriğine WebApplicationContextUtils sınıfını kullanarak erişebilirsiniz.
İlkbahar dokümanlarını okuduktan sonra, anlayış şu şekildedir:
a) Uygulama Bağlamları hiyerarşiktir ve WebApplicationContexts de öyle. Buradaki belgelere bakın.
b) ContextLoaderListener, web uygulaması için bir kök web uygulaması bağlamı oluşturur ve bunu ServletContext'e yerleştirir. Bu bağlam, kontrolör katmanında (Struts veya Spring MVC) kullanılan teknolojiden bağımsız olarak, yay tarafından yönetilen fasulyeleri yüklemek ve boşaltmak için kullanılabilir.
c) DispatcherServlet kendi WebApplicationContext dosyasını oluşturur ve işleyiciler / denetleyiciler / görünüm çözümleyiciler bu bağlam tarafından yönetilir.
d) ContextLoaderListener, DispatcherServlet ile birlikte kullanıldığında, önce daha önce belirtildiği gibi bir kök web-uygulama-bağlamı oluşturulur ve DispatcherSerlvet tarafından bir alt-bağlam da oluşturulur ve kök uygulama bağlamına eklenir. Buradaki belgelere bakın.
Spring MVC ile çalıştığımızda ve hizmetler katmanında da Spring kullandığımızda, iki uygulama bağlamı sağlıyoruz. İlki ContextLoaderListener, diğeri DispatcherServlet ile yapılandırıldı
Genel olarak, MVC ile ilgili tüm çekirdekleri (kontrolör ve görünümler vb.) DispatcherServlet bağlamında ve güvenlik, işlem, hizmetler vb. Gibi tüm kesişen çekirdekleri ContextLoaderListener tarafından kök bağlamda tanımlayacaksınız.
Daha fazla ayrıntı için buna bakın:
https://siddharthnawani.blogspot.com/2019/10/contextloaderlistener-vs.html