package rocks.inspectit.shared.all.spring.logger;
import java.lang.reflect.Field;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.stereotype.Component;
import org.springframework.util.ReflectionUtils;
import org.springframework.util.ReflectionUtils.FieldCallback;
/**
* Component to inject the {@link Log} to each bean that has a {@link Log} annotation.
*
* @author Patrice Bouillet
*
*/
@Component
public class LoggerPostProcessor implements BeanPostProcessor {
/**
* {@inheritDoc}
*/
@Override
public Object postProcessAfterInitialization(Object bean, String beanName) {
return bean;
}
/**
* {@inheritDoc}
*/
@Override
public Object postProcessBeforeInitialization(final Object bean, String beanName) {
ReflectionUtils.doWithFields(bean.getClass(), new FieldCallback() {
@Override
public void doWith(Field field) throws IllegalAccessException {
if (field.getAnnotation(Log.class) != null) {
Logger log = LoggerFactory.getLogger(bean.getClass());
ReflectionUtils.makeAccessible(field);
field.set(bean, log);
}
}
});
return bean;
}
}