/*
* This code is distributed under The GNU Lesser General Public License (LGPLv3)
* Please visit GNU site for LGPLv3 http://www.gnu.org/copyleft/lesser.html
*
* Copyright Denis Pavlov 2009
* Web: http://www.genericdtoassembler.org
* SVN: https://svn.code.sf.net/p/geda-genericdto/code/trunk/
* SVN (mirror): http://geda-genericdto.googlecode.com/svn/trunk/
*/
package com.inspiresoftware.lib.dto.geda.interceptor.impl;
import com.inspiresoftware.lib.dto.geda.interceptor.AdviceConfigRepository;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanPostProcessor;
import org.springframework.core.Ordered;
/**
* This post processor will scan the methods annotated with {@link com.inspiresoftware.lib.dto.geda.annotations.Transferable}
* on beans in order to white-list methods to be used for advice.
* <p/>
* User: denispavlov
* Date: Jan 27, 2012
* Time: 4:00:01 PM
*/
public class GeDABootstrapAdvicePostProcessor implements BeanPostProcessor, Ordered {
private final AdviceConfigRepository repo;
public GeDABootstrapAdvicePostProcessor() {
this.repo = new AdviceConfigRepositoryImpl();
}
/** {@inheritDoc} */
public Object postProcessBeforeInitialization(final Object bean, final String beanName) throws BeansException {
if (bean instanceof BootstrapAdviceConfigResolverImpl) {
((BootstrapAdviceConfigResolverImpl) bean).setRepository(this.repo);
} else {
this.repo.addApplicableMethods(bean);
}
return bean;
}
/** {@inheritDoc} */
public Object postProcessAfterInitialization(final Object bean, final String beanName) throws BeansException {
return bean;
}
/** {@inheritDoc} */
public int getOrder() {
return Ordered.LOWEST_PRECEDENCE;
}
}