본문 바로가기

IT 관련

[Spring sts] @Autowired 필드 null 오류 발생 할 때

안녕하세요 초이스40입니다.

 

스프링 프레임워크를 이용해서 개발을 진행할 때 아래와 같이 null 오류가 발생할 때가 있습니다.

 

[2021-11-04 17:22:21.664][ERROR][kr.co.interfaces.module.cj.gisticsService:-1] - response   >CJLogistics(RESULT_CD=null, RESULT_DETAIL=Success, DATA=CJLogistics.DATA(CLSFCD=XXXX, SUBCD=0, CLSFADDR=113동 111호, CLLDANNM=수벽, CLLDLM=김**, CLLDLVEMPN=G, RSP=7, P2=null)) 
[2021-11-04 17:22:21.666][DEBUG][kr.co.web.customer.repository.master.CmOnlineMemberPolicyDao.selectOnlineMemberPolicySeq:159] - ==>  Preparing: /*+ kr.co.web.customer.repository.master.CmOnlineMemberPolicyDao.selectOnlineMemberPolicySeq [현재 시행중인 회원의 정책 seq] */ SELECT TOP 1 A.PLCY_SEQ FROM CM_ONLINE_MEMBER_POLICY A with (nolock) WHERE A.PLCY_APPLY_YMD <= GETDATE() ORDER BY A.PLCY_SEQ DESC  
[2021-11-04 17:22:21.666][DEBUG][kr.co.web.customer.repository.master.CmOnlineMemberPolicyDao.selectOnlineMemberPolicySeq:159] - ==> Parameters:  

스프링을 이용해서 개발한 경우 @Autowired 로 의존성 주입을 하게되는데 Service 클래스의 매소드를 호출할 때 해당 클래스를 new를 이용해서 생성해주게 되면 의존성 주입을 통해서 생성된 클래스를 인식하지 못한다.

그런 경우 위와 같이 해당 클래스/변수 등이 null 오류가 발생하게 된다.

@Autowired를 이용해서 의존성 주입을 한 클래스는 new를 이용해서 참조하면 안되고 일관되게 @Autowired를 이용해서 클래스를 사용해야 한다.

 

위와 같은 원인이 아닌데 변수의 값이 null인 경우는 해당 클래스의 메소드가 private이고 패키지 경로가 다른 경우도 해당 클래스의 변수를 참고하려할 때 null을 리턴하는 경우가 있을 수 있다.

평소에는 복붙해서 사용하다가 이런 오류가 발생하면 어디가 잘못인지 몰라 몇 시간 헤매는 경우가 발생하는데 차근차근 즐거운 개발 하시기 바랍니다.

 

그럼 이만.

감사합니다.