package com.hwlcn.security.spring;
import com.hwlcn.security.util.Destroyable;
import com.hwlcn.security.util.Initializable;
import org.springframework.beans.BeansException;
import org.springframework.beans.FatalBeanException;
import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;
import org.springframework.core.PriorityOrdered;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class LifecycleBeanPostProcessor implements DestructionAwareBeanPostProcessor, PriorityOrdered {
private static final Logger log = LoggerFactory.getLogger(LifecycleBeanPostProcessor.class);
private int order;
public LifecycleBeanPostProcessor() {
this(LOWEST_PRECEDENCE);
}
public LifecycleBeanPostProcessor(int order) {
this.order = order;
}
public Object postProcessBeforeInitialization(Object object, String name) throws BeansException {
if (object instanceof Initializable) {
try {
if (log.isDebugEnabled()) {
log.debug("Initializing bean [" + name + "]...");
}
((Initializable) object).init();
} catch (Exception e) {
throw new FatalBeanException("Error initializing bean [" + name + "]", e);
}
}
return object;
}
public Object postProcessAfterInitialization(Object object, String name) throws BeansException {
return object;
}
public void postProcessBeforeDestruction(Object object, String name) throws BeansException {
if (object instanceof Destroyable) {
try {
if (log.isDebugEnabled()) {
log.debug("Destroying bean [" + name + "]...");
}
((Destroyable) object).destroy();
} catch (Exception e) {
throw new FatalBeanException("Error destroying bean [" + name + "]", e);
}
}
}
public int getOrder() {
return order;
}
}