mirror of
https://gitee.com/dromara/easy-es.git
synced 2025-12-06 17:18:57 +08:00
新增功能: 前序迭代已支持了一部分父子类型的查询功能,此版本对父子类型功能闭环,至此,父子类型功能已完整支持,新增功能包括: 1.新增对父子类型索引自动托管及手动API维护的支持 2.新增父子类型通过父id查询的功能 项目调整: 1.从0.9.30版本起调整项目Maven中央仓库中的groupId由io.github.xpc1024调整为cn.easy-es,已发布的老版本不受影响. 2.项目所有包名由com.xpc调整为cn.easy-es打头 3.新增common,annotation,test子模块,并调整了原项目结构,让模块之间耦合进一步降低,提升可读性,更易于维护.为即将迎来的性能测试,压力测试等埋下伏笔. 体验优化: 1.enableMust2filter配置生效范围增加对in,notIn,between等类型查询的支持 2.进一步简化高亮功能的使用门槛,代价是牺牲了少量灵活性,Easy至上! 3.针对自动托管索引的平滑模式,提供了"拉弓还有回头箭"功能,在索引迁移因各种原因迁移失败后,自动清理失败的索引,原索引不受任何影响. 缺陷修复: 1.修复multiMatchQuery查询参数被重复封装2次的缺陷.
103 lines
4.3 KiB
Java
103 lines
4.3 KiB
Java
package cn.easyes.starter.register;
|
|
|
|
import cn.easyes.common.utils.ArrayUtils;
|
|
import cn.easyes.core.conditions.interfaces.BaseEsMapper;
|
|
import org.springframework.beans.factory.annotation.AnnotatedBeanDefinition;
|
|
import org.springframework.beans.factory.config.BeanDefinition;
|
|
import org.springframework.beans.factory.config.BeanDefinitionHolder;
|
|
import org.springframework.beans.factory.support.AbstractBeanDefinition;
|
|
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
|
|
import org.springframework.beans.factory.support.GenericBeanDefinition;
|
|
import org.springframework.context.annotation.ClassPathBeanDefinitionScanner;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.Set;
|
|
|
|
/**
|
|
* 扫描指定路径下的所有接口
|
|
* <p>
|
|
* Copyright © 2021 xpc1024 All Rights Reserved
|
|
**/
|
|
public class ClassPathMapperScanner extends ClassPathBeanDefinitionScanner {
|
|
public ClassPathMapperScanner(BeanDefinitionRegistry registry) {
|
|
super(registry, false);
|
|
}
|
|
|
|
public void registerFilters() {
|
|
// default include filter that accepts all classes
|
|
addIncludeFilter((metadataReader, metadataReaderFactory) -> {
|
|
// 跳过非ee的mapper,比如瞎几把写的接口,没有继承BaseEsMapper
|
|
String className = metadataReader.getClassMetadata().getClassName();
|
|
try {
|
|
Class<?> clazz = Class.forName(className);
|
|
Class<?>[] interfaces = clazz.getInterfaces();
|
|
if (ArrayUtils.isNotEmpty(interfaces)) {
|
|
boolean isEeMapper = Arrays.asList(interfaces).contains(BaseEsMapper.class);
|
|
if (!isEeMapper) {
|
|
return false;
|
|
}
|
|
}
|
|
} catch (ClassNotFoundException e) {
|
|
logger.debug("mapper not found" + e);
|
|
}
|
|
return true;
|
|
});
|
|
|
|
// exclude package-info.java
|
|
addExcludeFilter((metadataReader, metadataReaderFactory) -> {
|
|
String className = metadataReader.getClassMetadata().getClassName();
|
|
return className.endsWith("package-info");
|
|
});
|
|
}
|
|
|
|
@Override
|
|
public Set<BeanDefinitionHolder> doScan(String... basePackages) {
|
|
Set<BeanDefinitionHolder> beanDefinitions = super.doScan(basePackages);
|
|
if (beanDefinitions.isEmpty()) {
|
|
logger.warn("No Easy-Es mapper was found in '" + Arrays.toString(basePackages) + "' package. Please check your configuration.");
|
|
} else {
|
|
processBeanDefinitions(beanDefinitions);
|
|
}
|
|
return beanDefinitions;
|
|
}
|
|
|
|
private void processBeanDefinitions(Set<BeanDefinitionHolder> beanDefinitions) {
|
|
GenericBeanDefinition definition;
|
|
for (BeanDefinitionHolder holder : beanDefinitions) {
|
|
definition = (GenericBeanDefinition) holder.getBeanDefinition();
|
|
String beanClassName = definition.getBeanClassName();
|
|
logger.debug("Creating MapperFactoryBean with name '" + holder.getBeanName()
|
|
+ "' and '" + beanClassName + "' mapperInterface");
|
|
|
|
// the mapper interface is the original class of the bean
|
|
// but, the actual class of the bean is MapperFactoryBean
|
|
definition.getConstructorArgumentValues().addGenericArgumentValue(beanClassName);
|
|
definition.setBeanClass(MapperFactoryBean.class);
|
|
|
|
logger.debug("Enabling autowire by type for MapperFactoryBean with name '" + holder.getBeanName() + "'.");
|
|
definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_BY_TYPE);
|
|
}
|
|
}
|
|
|
|
|
|
@Override
|
|
protected boolean isCandidateComponent(AnnotatedBeanDefinition beanDefinition) {
|
|
return beanDefinition.getMetadata().isInterface() && beanDefinition.getMetadata().isIndependent();
|
|
}
|
|
|
|
/**
|
|
* {@inheritDoc}
|
|
*/
|
|
@Override
|
|
protected boolean checkCandidate(String beanName, BeanDefinition beanDefinition) {
|
|
if (super.checkCandidate(beanName, beanDefinition)) {
|
|
return true;
|
|
} else {
|
|
logger.warn("Skipping MapperFactoryBean with name '" + beanName
|
|
+ "' and '" + beanDefinition.getBeanClassName() + "' mapperInterface"
|
|
+ ". Bean already defined with the same name!");
|
|
return false;
|
|
}
|
|
}
|
|
}
|