mirror of
https://github.com/hs-web/hsweb-framework.git
synced 2026-06-09 09:24:03 +08:00
使用CandidateComponentsIndex优化启动速度
This commit is contained in:
@@ -15,6 +15,8 @@ import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
||||
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
||||
import org.springframework.beans.factory.support.RootBeanDefinition;
|
||||
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
|
||||
import org.springframework.context.index.CandidateComponentsIndex;
|
||||
import org.springframework.context.index.CandidateComponentsIndexLoader;
|
||||
import org.springframework.core.ResolvableType;
|
||||
import org.springframework.core.annotation.AnnotationUtils;
|
||||
import org.springframework.core.io.Resource;
|
||||
@@ -25,6 +27,7 @@ import org.springframework.core.type.classreading.MetadataReader;
|
||||
import org.springframework.core.type.classreading.MetadataReaderFactory;
|
||||
import org.springframework.core.type.classreading.SimpleMetadataReaderFactory;
|
||||
|
||||
import javax.persistence.Table;
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.lang.reflect.Method;
|
||||
import java.util.*;
|
||||
@@ -60,18 +63,26 @@ public class EasyormRepositoryRegistrar implements ImportBeanDefinitionRegistrar
|
||||
boolean nonReactiveEnabled = Boolean.TRUE.equals(attr.get("nonReactive"));
|
||||
|
||||
String[] arr = (String[]) attr.get("value");
|
||||
Set<Resource> resources = Arrays
|
||||
.stream(arr)
|
||||
.flatMap(this::doGetResources)
|
||||
.collect(Collectors.toSet());
|
||||
// Set<Resource> resources = Arrays
|
||||
// .stream(arr)
|
||||
// .flatMap(this::doGetResources)
|
||||
// .collect(Collectors.toSet());
|
||||
|
||||
Class<Annotation>[] anno = (Class[]) attr.get("annotation");
|
||||
|
||||
Set<EntityInfo> entityInfos = new HashSet<>();
|
||||
|
||||
for (Resource resource : resources) {
|
||||
MetadataReader reader = metadataReaderFactory.getMetadataReader(resource);
|
||||
String className = reader.getClassMetadata().getClassName();
|
||||
CandidateComponentsIndex index = CandidateComponentsIndexLoader.loadIndex(org.springframework.util.ClassUtils.getDefaultClassLoader());
|
||||
Set<String> entities = Stream
|
||||
.of(arr)
|
||||
.flatMap(_package -> {
|
||||
return index
|
||||
.getCandidateTypes(_package, Table.class.getName())
|
||||
.stream();
|
||||
})
|
||||
.collect(Collectors.toSet());
|
||||
for (String className : entities) {
|
||||
// MetadataReader reader = metadataReaderFactory.getMetadataReader(resource);
|
||||
// String className = reader.getClassMetadata().getClassName();
|
||||
Class<?> entityType = org.springframework.util.ClassUtils.forName(className, null);
|
||||
if (Arrays.stream(anno)
|
||||
.noneMatch(ann -> AnnotationUtils.findAnnotation(entityType, ann) != null)) {
|
||||
|
||||
Reference in New Issue
Block a user