Aware interface significa en español interfaz consciente, este tipo de interfaces actúan como listeners para ciertos eventos que suceden en Spring framework.
Las siguientes son las Aware interfaces en Spring framework:
Aware interface | Recurso objetivo |
BeanNameAware | El nombre del bean de las instancias configuradas en el contenedor |
BeanFactoryAware | El bean factory actual a través del cual se invoca el contenedor |
ApplicationContextAware | El application context actual a través del cual puedes invocar el contenedor |
MessageSourceAware | El message source a través del cual se pueden resolver mensajes |
ApplicationeventPublisherAware | El even publisher a través del cual se pueden publicar eventos de la aplicación |
ResourceLoaderAware | El resource loader a través del cual puedes cargar recursos externos |
EnvironmentAware | La instancia de Environment asociada con el ApplicationContext |
Las Aware Interfaces definen métodos setters los cuales se invocan por Spring después de que las propiedades de Spring se asignaron pero antes de que los método callback (postConstruct y preDestroy) se invoquen.
Ejemplo utilizando BeanNameAware
Para entender como funcionan las aware interfaces crearemos el siguiente bean:
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.BeanNameAware;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class UserService implements BeanNameAware {
@Value("fakeUser")
private String user;
private static final Logger log = LoggerFactory.getLogger(UserService.class);
@PostConstruct
public void init() {
log.info("Post construct callback {}",user);
}
@Override
public void setBeanName(String name) {
log.info("Being aware of {} {}", name,user);
}
@PreDestroy
public void destroy() {
log.info("Pre destroy callback");
}
}
Al ejecutar la aplicación tendremos la siguiente salida:
2019-02-14 16:01:55.319 INFO 16934 --- [ main] com.devs4j.Devs4jSpringCoreApplication : Starting Devs4jSpringCoreApplication on m-C02RV1WXG8WP with PID 16934 (/Users/maagapi/Documents/workspaces/devs4j/devs4j-spring-core/target/classes started by maagapi in /Users/maagapi/Documents/workspaces/devs4j/devs4j-spring-core)
2019-02-14 16:01:55.321 INFO 16934 --- [ main] com.devs4j.Devs4jSpringCoreApplication : No active profile set, falling back to default profiles: default
2019-02-14 16:01:55.686 INFO 16934 --- [ main] com.devs4j.aware.UserService : Being aware of userService fakeUser
2019-02-14 16:01:55.687 INFO 16934 --- [ main] com.devs4j.aware.UserService : Post construct callback fakeUser
2019-02-14 16:01:55.833 INFO 16934 --- [ main] com.devs4j.Devs4jSpringCoreApplication : Started Devs4jSpringCoreApplication in 0.816 seconds (JVM running for 1.11)
2019-02-14 16:01:55.836 INFO 16934 --- [ Thread-2] com.devs4j.aware.UserService : Pre destroy callback
Este tipo de interfaces se utilizan para logging o para realizar integraciones con código legado, en la mayoría de los casos debemos evitar utilizarlas debido a que acoplan nuestra aplicación a Spring framework.
Para estar al pendiente sobre nuestro contenido nuevo síguenos en nuestras redes sociales https://www.facebook.com/devs4j/ y https://twitter.com/devs4j.
Autor: Alejandro Agapito Bautista
Twitter: @raidentrance
Contacto:raidentrance@gmail.com