forest无法扫描指定包接口问题解决

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;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值