Nov 21 2008
Interfejs InitializingBean
Filed under Java,Porady,Spring by Łukasz Dywicki
Każdy z obiektów który jest konfigurowany w kontekście Springa ma szansę zweryfikować swój stan tuż po zainicjowaniu wszystkich wartości, które zostały mu przekazane. Wynika to z tego, że czasami obiekty potrafią działać na kilku różnych zasobach i można wstrzyknąć do nich tylko jeden rodzaj tegoż. Czasami po prostu potrzebujemy sprawdzić czy są przekazane wszystkie ustawienia konfiguracyjne bądź zainicjować połączenie do bazy danych na podstawie przekazanych parametrów.
Mamy wówczas do wyboru dwie metody. Pierwszą z nich jest implementacja interfejsu org.springframework.beans.factory.InitializingBean. Jeśli wyrzuci ona jakiś wyjątek to Spring wyrzuci wyjątek wyżej i wstrzyma powoływanie kontekstu. Oto przykład:
package org.code_house.samples.spring; import java.util.Properties; import org.springframework.beans.factory.BeanInitializationException; import org.springframework.beans.factory.InitializingBean; public class PropertiesConfiguration implements InitializingBean { /** * Ustawienia konfiguracyjne. */ private Properties properties; public void setProperties(Properties props) { this.properties = props; } public void afterPropertiesSet() throws Exception { if (properties == null) { throw new BeanInitializationException("Nie przekazano ustawień " +"konfiguracyjnych. Pole properties jest wymagane."); } } }
Spring nie wymusza jednak implementowania interfejsu. Jeśli nasz kod już istnieje i jest metoda która weryfikuje stan obiektu możemy użyć atrybutu init-method dla znacznika bean:
<bean class="org.code_house.samples.xml.JaxbConfiguration" init-method="verify"> <property name="source" value="classpath:data.xml" /> </bean>
Inną opcją na zrealizowanie sprawdzenia poprawności stworzenia beana, raczej wygodniejszą od sprawdzania czy pola są nullami jest adnotacja @Required
http://static.springframework.org/spring/docs/2.5.x/api/org/springframework/beans/factory/annotation/Required.html