-
[Spring/java] 객체에 NullPointException? Servlet.xml을 확인하자Error 2021. 2. 18. 16:21
NullPointException, 객체가 비어져있다?
아래는 내가 짠 예제 코드다. 업무코드다보니 변수 / 클래스 이름 등은 임의로 바꾸고 이외의 코드들은 생략했다.
public class SampleAjaxController implements Controller { private SampleClass sampleClass; public void setSampleClass(SampleClass sampleClass) {this.sampleClass = sampleClass;} private String sampleMethod(HttpServletRequest request, JSONObject jsonObj) { String result= "Fail"; try { result = sampleClass.userPwdDecrypt("샘플"); System.out.println("결과 : "+result); } catch (Exception e) { e.printStackTrace(); } return result; } }
메소드를 추가해 관리자가 입력된 현재 비밀번호를 확인할 수 있는 기능을 추가하고자 했다. DB에서 암호화된 비밀번호를 가져오고, 이미 있는 암/복호화 클래스를 이용해 암호화된 비밀번호를 복호화해서 다시 view 단에 보내는 작업이다.
그런데 디버깅 해보니 암/복호화 인스턴스(sampleClass)가 비어져 있었다. NullPointException이 발생한 것. 아니 객체 제대로 생성했는데 왜?? 했더니 원인은 다른 곳에 있었다.
Spring 2.0의 함정
요새 대부분의 Spring 개발은 Spring 3.0 이상의 버전에서 진행된다. xml 파일에 직접 설정을 기술해야 했던 이전 버전들과 달리 Spring 3.0 이상부터는 어노테이션 기능을 제공해 좀 더 쉽고 코드를 적게 기술하여 작성할 수 있기 때문이다. 게다가 요새는 Spring이 아니라 더 간략화된 Spring boot를 쓴다.
나 역시 Spring을 3.0 부터 접해왔던지라 어노테이션으로 기술하는 것에 익숙해져있는 상황이었다. 그러다보니 Servlet.xml에 bean을 등록해줘야 한다는 사실을 까먹었다!
위의 코드에서 sampleClass는 생성자가 생성될 때 서블릿에 bean이 등록되어 있지 않아 객체가 비워진 상태였다. DI(의존성 주입)이 이뤄지지 않은 것.
Spring 3.0 이상부터는 XML 설정 파일을 전처럼 복잡하게 만질 필요가 없어졌다. bean 객체도 Java만 사용해서 등록할 수 있다. Spring 3.0과 2.0의 차이에 대해 서술하고 있는 블로그들을 참조하자
Spring 3 — XML 없이 Java만 사용해서 설정하기
내가 스프링을 처음으로 접한 것은 스프링 프레임워크의 버전이 3.0 으로 막 올라간지 얼마 안되었을 때였다.
medium.com
Spring Framework 의 특징과 버전별 주요 Feature 들
Spring framework 는 전세계적으로 손꼽힐정도로 우수한 Java Framework 이다. 개발 생산성을 위해 지원하는 강력한 기능들에 비해 경량의 프레임워크이고 많은 복잡하거나 귀찮은 부분들(특히 Servlet 처
jins-dev.tistory.com
Servlet.xml에 bean 추가
<beans> <bean id="SampleAjaxController" class="URL주소"> <property name=sampleClass" ref="sampleClass"/> </bean> </beans>
Spring 2.0 버전에서는 이처럼 쓰고자하는 인스턴스를 bean에 일일히 추가해야한다. 그래야지 객체를 사용할 수 있다. bean을 추가하니 DI가 제대로 이뤄져 문제를 해결할 수 있었다.
Spring은 3.0 이하 버전과 이후 버전이 매우 다르다. 우리 회사에서도 Spring 버전 업에 대한 이야기가 화두다. Spring 4.0 이상부터는 iBatis / Mybatis 지원이 안된다는 맹점이 있어서 iBatis / myBatis 사용이 보편화된 한국에서는 버전업을 꺼린다고 한다. Hibernate 같은 프레임워크가 iBatis / myBatis 대신 각광받고 있지만 국내 개발 환경에서는 먼 이야기 같이 느껴지기도...
'Error' 카테고리의 다른 글