forest无法扫描指定包接口问题解决
程序员文章站
2022-05-03 09:53:36
...
0.项目为dubbo服务 无法使用注解注入
@ForestScan(basePackages = "com.yoursite.client")
1.扫描指定路径下的java类 手动交给spring管理
import com.dtflys.forest.config.ForestConfiguration;
import com.zjy.zjeframework.core.exception.SimpleException;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.BeanFactoryPostProcessor;
import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.core.type.classreading.CachingMetadataReaderFactory;
import org.springframework.core.type.classreading.MetadataReader;
import org.springframework.core.type.classreading.MetadataReaderFactory;
import org.springframework.stereotype.Component;
/**
* @author enzo
* @date 2020/12/24 11:10
* @description http相关bean初始化
*/
@Component
public class ForestBeanInitialize implements BeanFactoryPostProcessor {
@Override
public void postProcessBeanFactory(ConfigurableListableBeanFactory configurableListableBeanFactory) throws BeansException {
ForestConfiguration configuration = ForestConfiguration.getDefaultConfiguration();
try {
ResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
MetadataReaderFactory metaReader = new CachingMetadataReaderFactory();
//根据类路径加载所有的类
Resource[] resources = resolver.getResources("classpath*:com/zjy/iot/smart/community/api/**/*.class");
ClassLoader loader = ClassLoader.getSystemClassLoader();
for (Resource resource : resources) {
MetadataReader reader = metaReader.getMetadataReader(resource);
String className = reader.getClassMetadata().getClassName();
Class<?> clazz = loader.loadClass(className);
//使用forest创建实例
Object instance = configuration.createInstance(clazz);
//注册到spring中
configurableListableBeanFactory.registerSingleton(className, instance);
}
} catch (Exception e) {
throw new SimpleException();
}
}
}
2.调用service
@Resource private LoginService loginService;
推荐阅读