Blogta ziyaret edilen girdilere göz attığımda "Spring - JSF Bütünleştirmesi" yazımın son zamanlarda tekrar ziyaret edildiğini farkettim. Hazır geçen hafta da JTPD'nin eğitim seminerlerinde bu konular üzerine eğilmişken iki çatının entegrasyonunu, değişen yeteneklerini de dikkate alarak tekrar gözden geçirelim istedim.
Eski girdide bu iki çatıyı birbirleriyle anlaşır hale getirebilmek için JSF'ye variable resolver olarak Spring'in bize sunduğu DelegatingVariableResolver sınıfını tanıtmıştık. Bu sınıf iki çatı arasında bean aktarımlarını gerçekleştirmek için aktarımı yapılacak beani öncelikle JSF beanlerinde, bulamazsa Spring beanlerinde arıyordu. Benzer şekilde, önce Spring bean tanımlarına sonra da JSF bean tanımlarına bakan SpringBeanVariableResolver Spring sınıfını da JSF 1.1 ve 1.2 sürümlerinde kullanabiliriz.
JSF 1.2+ sürümlerinde ise variable resolver kullanımı yerini ELResolver'a bırakıyor:
Spring ile JSF'i bu şekilde ilişkilendirdikten sonra eski yazıdaki örneği bu sefer JSF 2.0'ın annotationlarını kullanarak Spring beanini JSF bean tanımı içine aktarımını yapalım:
Spring bean tanımını da @Service("memberService") ya da @Component("memberService") annotationlarını kullanarak da xml'e bulaşmadan MemberService sınıfı içinde yapabiliriz:
Spring annotationlarının çalışması içinse Spring context xml tanımınına ya <context:component-scan base-package="com.prime.packname"></context:component-scan> satırını eklemeli ya da web.xml içerisinde Spring bean tanımlarını xml yerine annotation kullanarak yapacağımızı belirten gerekli düzenlemeleri yapmalıyız:
Bu işlemlerin ardından annotationlarla tanımladığımız Spring ve JSF beanlerini birbirine entegre olarak kullanabiliriz. Bol Javalar..
<faces-config> <application> <el-resolver>org.springframework.web.jsf.el.SpringBeanFacesELResolver</el-resolver> </application> </faces-config>
Spring ile JSF'i bu şekilde ilişkilendirdikten sonra eski yazıdaki örneği bu sefer JSF 2.0'ın annotationlarını kullanarak Spring beanini JSF bean tanımı içine aktarımını yapalım:
@ManagedBean(name="member") @RequestScoped public class Member { @ManagedProperty(value="#{memberService}") private MemberService memberService; // memberService getter/setter }
Spring bean tanımını da @Service("memberService") ya da @Component("memberService") annotationlarını kullanarak da xml'e bulaşmadan MemberService sınıfı içinde yapabiliriz:
@Service("memberService") public class MemberServiceImpl implements MemberService { // ... }
Spring annotationlarının çalışması içinse Spring context xml tanımınına ya <context:component-scan base-package="com.prime.packname"></context:component-scan> satırını eklemeli ya da web.xml içerisinde Spring bean tanımlarını xml yerine annotation kullanarak yapacağımızı belirten gerekli düzenlemeleri yapmalıyız:
<web-app> <context-param> <param-name>contextClass</param-name> <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value> </context-param> <context-param> <param-name>contextConfigLocation</param-name> <param-value>com.prime.packageName</param-value> </context-param> </web-app>
Bu işlemlerin ardından annotationlarla tanımladığımız Spring ve JSF beanlerini birbirine entegre olarak kullanabiliriz. Bol Javalar..
Hiç yorum yok:
Yorum Gönder