티스토리 뷰

728x90
반응형

 

 

 

 

 

 

 

아래와 같은 식으로, OncePerRequestFilter를 사용(extends)하여 특정 서비스를 @Autowired로 주입받으려고하니,

NullPointerException이 발생하며 에러가 났습니다.

 

public class .. extends OncePerRequestFilter{
	@Autowired
	private Service service;
    
    @Override
    protected void doFilterInternal{
    	...
        
    }
}

 

 

 

이는 Spring의 빈(Bean) 주입 순서와 관련된 문제입니다.

' OncePerRequestFilter'는 서블릿 필터이며, String에서 관리하는 다른 빈들과는 다른 생명주기를 가지고 있습니다.

이로 인해 서비스가 올바르게 주입되지 않은 것 같습니다.

 

직접 ApplicationContext를 통해 서비스 빈을 가져오도록 수정하면 됩니다.

@Override
protected void doFilterInternal(
	HttpServletRequest request,
    HttpServletResponse response,
    FilterChain filterChain) throws ServletException, IOException {
    ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
    Service service = ctx.getBean(Service.class);
    // 이제 Service를 사용할 수 있습니다.
}

 

 

 

@Autowired를 사용하여 서비스를 주입받는 부분은 삭제해줍니다.

// 아래 부분은 삭제
@Autowired
private Service service;

 

 

이렇게 수정하고 재실행해보면 정상적으로 실행되는 것을 확인할 수 있습니다.

 

728x90
반응형
댓글