ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스프링퀵스타트 빈생성 에러 및 학습
    Spring/Spring Quick Start 2019. 5. 20. 14:50

    맥북에서 교재와 동일한 버전, 동일한 소스로 작성을 했음에도 불구하고  AbstractApplicationContext와 GenericXmlApplicationContext를 자동 호출하는게 되지 않았고 그래서 강제 입력해도 되지 않았다.

    문제의 원인이 무엇인지 파악하고자 구글링을 해보았으나 이와 동일한 증세로 겪고있는 사람을 찾지못했다.

    다만, 대안 해결책으로는 몇 가지 제시했었는데 이는 다음과 같다.

    1. 프로젝트 클린

    2. 메이븐 업데이트

    3. 이클립스 재실행

    필자는 위와 같은 모든 과정을 거치고 심지어 프로젝트 삭제 및 새로 생성하여 모든 과정을 처음부터 다시 시작했으나 제대로 되지 않아서 노트북>데스크탑으로 옮겨서 실행해봤는데 정상적으로 작동하였습니다.

     

     

     

    정작 중요한 원인 파악 및 해결점은 찾지 못했습니다.  혹시 아시는 분 있다면 댓글좀 해결책 제시 해주시면 감사하겠습니다.

     

     

     

     

    자동 호출 안됐던 부분

     

    import org.springframework.context.support.AbstractApplicationContext; 
    import org.springframework.context.support.GenericXmlApplicationContext;

     

     

     

     

     

    |학습

     

    스프링에서는 BeanFactory와 이를 상속한 ApplicationContext 두 가지 유형의 컨테이너를 제공한다. 

    BeanFactory 는 스프링 설정 파일에 등록된 <bean> 객체를 생성하고 관리하는 가장 기본적인 컨테이너 기능만 제공한다. 그리고 컨테이너가 구동될 때 <bean> 객체를 생성하는게 아니라, 클라이언트의 요청(lookup)에 의해서만 <bean>객체가 생성되는 지연 로딩(Lazy Loading) 방식을 사용한다. 따라서 일반적인 스프링 프로젝트에서 BeanFactory를 사용할 일은 전혀없다.

     

     

    ApplicationContext는 BeanFactory가 제공하는 <bean>객체 관리 기능외에도 트랜잭션 관리나 메세지 기반의 다국어 처리 등 다양한 기능을 지원한다. 또한, 컨테이너가 구동되는 시점에 <bean> 등록된 클래스들을 객체 생성하는 즉시 로딩(pre-loading)방식으로 동작한다. 그리고 웹 애플리케이션 개발도 지원하므로 대부분 스프링 프로젝트는 ApplicaitonContext유형의 컨테이너를 이용한다.

    구현 클래스 기능
    GenericXmlApplicationContext 파일 시스템이나 클래스 경로에 있는 XML 설정 파일을 로딩하여 구동하는 컨테이너이다.
    XmlWebApplicationContext 웹 기반의 스프링 애플리케이션을 개발할 때 사용하는 컨테이너이다.

     

     

    <bean>객체를 위한 이름을 지정할 때 반드시 사용하는 속성이 id 이다.

    id 속성은 컨테이너로부터 <bean>객체를 요청할 때 사용하므로 반드시 스프링 컨테이너가 생성한 개체들 사이에서

    유일해야 한다. 그래야 컨테이너가 각 객체를 식별할 수 있다.

     

    id속성값에 해당하는 문자열은 자바의 식별자 작성자 규칙을 따르며, 일반적으로 '낙타표기법(CamelCase)'을 사용한다.

     

    에러발생조건

    id 문제 발생 이유
    id="7useService" 숫자로 시작
    id="user Service" 공백 포함
    id="user#Service:impl" 특수기호 사용

     

    id와 같은 기능을 하는 속성으로 'name'도 있다. name 속성은 id와 달리 자바 식별자 작성 규칙을 따르지 않는 문자열도 허용한다. 따라서 특수기호가 포함된 아이디를 <bean>아이디로 지정하고싶을 때는 id대신 name속성을 쓴다.

    name="http://www.daum.net"

    name="http://www.naver.com"

    물론 name 속성값 역시 전체 스프링 파일 내에서도 유일해야 한다. 사실 id나 name 속성 중 어떤것을 사용하든 상관없다. 다만, name보다는 어느 정도의 규칙이 있는 id 속성을 좀 더 선호하는것일 뿐이다.

     

    댓글

© 2018 T-Story. All right reserved.