Home  >  Article  >  Java  >  What are the reasons why SpringBoot @Autowired injection is empty?

What are the reasons why SpringBoot @Autowired injection is empty?

PHPz
PHPzforward
2023-05-14 18:40:153146browse

    Interpretation of @Autowired injection being empty

    Due to the recent encounter in development when using @Autowired annotation to automatically assemble, a null pointer will be reported, and I found that The object was not assembled. Through query, several possible reasons for this situation were summarized.

    1. In the simplest case, check the assembled class, that is, whether the class under the @Autowired annotation has added annotations and handed them over to SpringBoot for hosting, @service and other annotations, or directly added @Component annotation.

    2. Check whether your xxxxxApplication is in the root directory, because springboot scans the directory under the startup class by default (I remember this is only limited to versions before Springboot2.0.5, because the new version can be annotated through @ComponenScan Specify the scan range).

    3. Spring annotations such as @Service, @Componet, @Configuration, and @Repository were not scanned. For example: springboot's main class scanning rules mean that you need to check your Springboot startup class, xxxxxApplication, and check the startup Whether the @ComponenScan annotation is added to the annotation on the class and whether the scan range is specified.

    Two annotation configuration methods for using springboot to start class configuration scanning:

    • 1, @Controller @EnableAutoConfiguration @ComponentScan.

    • 2, @SpringBootApplication

    4. Use the emergency method. If the cause is not found, we will use other methods to make the program work first. Run and debug normally, and then look for problems later.

    @Autowired
     private SchedulerFactoryBean schedulerFactoryBean;
        
     private static QuartzManager quartzManager;
        
     /**
      * 通过@PostConstruct实现初始化bean之前进行的操作
      * @desc 初始化操作,得到QuartzManager实例
      * @Date 2019年1月7日
      */
     @PostConstruct 
     public void init() {  
          quartzManager = this;  
          quartzManager.schedulerFactoryBean = this.schedulerFactoryBean;        
    }

    Use @PostConstruct to initialize.

    5. This reason is very important and is also a factor that is often ignored. The caller comes from new. If there is a member property B in class A, B is automatically injected through @Autowired, and the instance of class A is generated through new, then the automatic injection will be invalid. At this time, all Bean methods are obtained through the Spring context. Get B. At this time, take a look at the class you are reporting a null pointer to see if it was created by new. If so, you might as well use the SpringUtil.getBean() method to replace it, and then try again!

    @Autowired injected bean cannot find exception

    Exception description

    ********************** ********
    APPLICATION FAILED TO START
    ******************************

    Description:

    Field clientAuthService in com.yinhai.mzgh.eurekaclient.feign.interceptor.Oauth3RequestInterceptor
    required a bean of type 'com.yinhai.mzgh.eurekaclient.feign.service.ClientAuthService' that could not be found.

    The injection point has the following annotations:
    - @org.springframework.beans.factory.annotation.Autowired(required=true)


    Action:

    Consider defining a bean of type 'com.yinhai.mzgh.eurekaclient.feign.service.ClientAuthService' in your configuration.

    Cause of the problem

    This problem It's an environmental problem. It was the dev environment before in Profiles

    What are the reasons why SpringBoot @Autowired injection is empty?

    The above is the detailed content of What are the reasons why SpringBoot @Autowired injection is empty?. For more information, please follow other related articles on the PHP Chinese website!

    Statement:
    This article is reproduced at:yisu.com. If there is any infringement, please contact admin@php.cn delete