@Slf4j
public class DtpAdapterListener implements GenericApplicationListener {
/**
* Do refresh.
* @param dtpProperties dtpProperties
*/
protected void doRefresh(DtpProperties dtpProperties) {
val handlerMap = ApplicationContextHolder.getBeansOfType(DtpAdapter.class);
if (CollectionUtils.isEmpty(handlerMap)) {
return;
}
handlerMap.forEach((k, v) -> v.refresh(dtpProperties));
}
}
其中ApplicationContextHolder代码如下
public class ApplicationContextHolder implements ApplicationContextAware {
private static ApplicationContext context;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
context = applicationContext;
}
public static <T> T getBean(Class<T> clazz) {
if (Objects.isNull(context)) {
throw new NullPointerException("ApplicationContext is null, please check if the spring container is started.");
}
return context.getBean(clazz);
}
public static <T> T getBean(String name, Class<T> clazz) {
return context.getBean(name, clazz);
}
public static <T> Map<String, T> getBeansOfType(Class<T> clazz) {
return context.getBeansOfType(clazz);
}
public static ApplicationContext getInstance() {
return context;
}
public static Environment getEnvironment() {
return getInstance().getEnvironment();
}
public static void publishEvent(ApplicationEvent event) {
context.publishEvent(event);
}
}
导包通过spring.factoryies import导入
其中查看
SpringBoot的@ConditionalOnMissingBean注解的作用
以及注解ConditionOnAlibabaDubboApp中的AnyNestedCondition任一注解才会注入这个Config
AnyNestedCondition