>  기사  >  Java  >  SpringBoot @Autowired 주입이 비어 있는 이유는 무엇입니까?

SpringBoot @Autowired 주입이 비어 있는 이유는 무엇입니까?

PHPz
PHPz앞으로
2023-05-14 18:40:153297검색

    @Autowired 주입이 비어있는 상황 해석

    최근 개발 중 자동 조립을 위해 @Autowired 주석을 사용할 때 발생하는 문제로 인해 널 포인터가 보고되며 개체가 조립되지 않은 것으로 확인됩니다. 쿼리를 통해 원인이 무엇인지 여러 가지 가능성을 요약했습니다.

    1 가장 간단한 경우에는 조립된 클래스를 확인합니다. 즉, @Autowired 주석 아래의 클래스에 주석이 추가되어 호스팅, @service 및 기타 주석을 위해 SpringBoot에 전달되는지, 아니면 @Component 주석이 직접 추가되는지 확인합니다.

    2 springboot는 기본적으로 시작 클래스 아래의 디렉터리를 검색하므로 xxxxxApplication이 루트 디렉터리에 있는지 확인하세요. (새 버전에서는 검색 범위를 @ComponenScan 주석) .

    3. @Service, @Componet, @Configuration 및 @Repository와 같은 Spring 주석은 스캔되지 않았습니다. 예를 들어 springboot의 기본 클래스 스캔 규칙은 Springboot 시작 클래스인 xxxxxApplication을 확인해야 함을 의미합니다. 시작 클래스에 대한 주석입니다. 스캔 범위 지정 여부를 결정하기 위해 @ComponenScan 주석이 추가됩니다.

    springboot를 사용하여 클래스 구성 스캔을 시작하는 두 가지 주석 구성 방법:

    • 1, @Controller @EnableAutoConfiguration @ComponentScan.

    • 2.@SpringBootApplication

    4. 원인이 발견되지 않으면 먼저 다른 방법을 사용하여 프로그램을 정상적으로 실행하고 디버깅한 다음 나중에 문제를 찾습니다.

    @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;        
    }

    초기화하려면 @PostConstruct를 사용하세요.

    5. 이 이유는 매우 중요하며 종종 무시되는 요소이기도 합니다. 발신자는 새로운 사람에게서 왔습니다. 클래스 A에 멤버 프로퍼티 B가 있으면 @Autowired를 통해 B가 자동으로 주입되고, new를 통해 클래스 A의 인스턴스가 생성되면 자동 주입은 무효가 된다. 이때 모든 Bean 메소드는 Spring을 통해 획득된다. B를 가져옵니다. 이때 null 포인터를 보고하는 클래스를 살펴보고 new로 생성되었는지 확인하고, 그렇다면 SpringUtil.getBean() 메서드를 사용하여 교체한 후 다시 시도하는 것이 좋습니다.

    @Autowired 주입된 빈을 찾을 수 없음 예외

    예외 설명

    ********************************
    신청 실패 START
    ***************************

    설명:

    com.yinhai.mzgh.eurekaclient.feign.interceptor의 Field clientAuthService입니다. Oauth3RequestInterceptor
    에는 찾을 수 없는 'com.yinhai.mzgh.eurekaclient.feign.service.ClientAuthService' 유형의 Bean이 필요합니다.

    주입 지점에는 다음 주석이 있습니다.
    - @org.springframework.beans.factory.annotation .Autowired (required=true)


    Action:

    구성에서 'com.yinhai.mzgh.eurekaclient.feign.service.ClientAuthService' 유형의 Bean을 정의하는 것을 고려해보세요.

    문제의 원인

    이 문제 환경 문제입니다. 프로필에서는 예전에는 개발 환경이었습니다

    SpringBoot @Autowired 주입이 비어 있는 이유는 무엇입니까?

    위 내용은 SpringBoot @Autowired 주입이 비어 있는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    성명:
    이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제