package org.springframework.amqp.util;
import com.rabbitmq.client.Channel;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.amqp.AMQException;
import org.springframework.amqp.component.Component;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.FactoryBean;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.beans.factory.config.BeanPostProcessor;
public class AutoDeclaringBeanPostProcessor implements BeanPostProcessor {
private static final Log log = LogFactory.getLog(AutoDeclaringBeanPostProcessor.class);
private FactoryBean channelFactoryBean;
@Required
public void setChannelFactoryBean(FactoryBean channelFactoryBean) {
this.channelFactoryBean = channelFactoryBean;
}
public Object postProcessBeforeInitialization(Object o, String s) throws BeansException {
return(o);
}
public Object postProcessAfterInitialization(Object o, String s) throws BeansException {
if (o instanceof Component) {
Component component = (Component)o;
try {
component.setChannel((Channel) channelFactoryBean.getObject());
if (log.isInfoEnabled())
log.info(String.format("Auto declaring AMQ '%s' component bean '%s'", o.getClass().getSimpleName(), s));
component.declare();
} catch (Exception e) {
throw new AMQException("Error while auto declaring component bean", e);
}
}
return o;
}
}