美文网首页
Feign注入依赖为null

Feign注入依赖为null

作者: bit_拳倾天下 | 来源:发表于2021-01-25 22:24 被阅读0次

在使用Feign过程中,遇到一个让人特别摸不到头脑的问题,启动服务时,系统报错:

Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.kes.cybereng.check.common.client.DictionaryClient': FactoryBean threw exception on object creation; nested exception is java.lang.NullPointerException
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.doGetObjectFromFactoryBean(FactoryBeanRegistrySupport.java:178) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.beans.factory.support.FactoryBeanRegistrySupport.getObjectFromFactoryBean(FactoryBeanRegistrySupport.java:101) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getObjectForBeanInstance(AbstractBeanFactory.java:1674) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.getObjectForBeanInstance(AbstractAutowireCapableBeanFactory.java:1249) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:257) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:277) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.addCandidateEntry(DefaultListableBeanFactory.java:1478) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.findAutowireCandidates(DefaultListableBeanFactory.java:1435) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1218) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1175) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.autowireResource(CommonAnnotationBeanPostProcessor.java:521) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.getResource(CommonAnnotationBeanPostProcessor.java:497) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor$ResourceElement.getResourceToInject(CommonAnnotationBeanPostProcessor.java:637) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:180) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    at org.springframework.context.annotation.CommonAnnotationBeanPostProcessor.postProcessProperties(CommonAnnotationBeanPostProcessor.java:322) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE]
    ... 33 common frames omitted

就是 DictionaryClient 注入不了。代码如下:

@EnableFeignClients(defaultConfiguration = FeignConfig.class, basePackages = "com.test.check.common.client")
public class TestCheckApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestCheckApplication.class, args);
    }

}
@FeignClient(
        value = AppConstant.SYS_APPLICATION_DICTIONARY_NAME,
        fallback = DictionaryClientFallBack.class
)
public interface DictionaryClient {
    /**
     * 获取项目类型枚举
     * @param code 字典键
     * @return ApiResponseBody
     */
    @GetMapping(path = "/dictionaryDetail", produces = {"application/json;charset=UTF-8"})
    ApiResponseBody dictionaryDetail(@RequestParam String code) ;

}
@Service
@Slf4j
public class CommonServiceImpl implements ICommonService {

    @Resource
    private DictionaryClient dictionaryClient;
  @Override
    public void exportServiceTemplate(TemplateExportParam templateExportParam) throws InvocationTargetException, IllegalAccessException, IOException, ClassNotFoundException, InstantiationException, NoSuchMethodException, NoSuchFieldException {
      ...
      Object data = dictionaryClient.dictionaryDetail(dictionaryField).getData();
      ...
    }
}
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-openfeign</artifactId>
            <version>2.0.0.RELEASE</version>
        </dependency>

讲道理应该没有问题啊,但是就是报错,最后在basePackages的最后加了个“*”,解决了问题。@ComponentScan,@MapperScan都不用加通配符,但是这个不行。。。

结论:

@EnableFeignClients 的 basePackages 要加通配符,修改后:

@EnableFeignClients(defaultConfiguration = FeignConfig.class, basePackages = "com.kes.cybereng.check.common.client.*")

相关文章

网友评论

      本文标题:Feign注入依赖为null

      本文链接:https://www.haomeiwen.com/subject/scqwzktx.html