36 lines
1.1 KiB
Java
36 lines
1.1 KiB
Java
package quant.rich.emoney.config;
|
|
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
|
|
import org.springframework.beans.factory.BeanCreationException;
|
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
|
@Slf4j
|
|
public class ConstructionGuard {
|
|
private static final ThreadLocal<Set<Class<?>>> constructing = ThreadLocal.withInitial(HashSet::new);
|
|
|
|
public static boolean isConstructing(Class<?> clazz) {
|
|
return constructing.get().contains(clazz);
|
|
}
|
|
|
|
public static void enter(Class<?> clazz) {
|
|
log.debug("Enter construction for {}", clazz.toString());
|
|
if (isConstructing(clazz)) {
|
|
StringBuilder sb = new StringBuilder();
|
|
sb.append("Class ")
|
|
.append(clazz.getName())
|
|
.append(" is being constructed but is seems like circular involving.");
|
|
String msg = sb.toString();
|
|
log.error(msg);
|
|
throw new BeanCreationException(msg);
|
|
}
|
|
constructing.get().add(clazz);
|
|
}
|
|
|
|
public static void exit(Class<?> clazz) {
|
|
constructing.get().remove(clazz);
|
|
log.debug("Exit construction for {}", clazz.toString());
|
|
}
|
|
} |