본문 바로가기

건승하고있어요/Spring framework

[Spring] 스프링1일차 - 스프링 XML 설정

반응형

<beans> 루트 엘리먼트

-스프링 컨테이너는 <bean>저장소에 해당하는 XML 설정파일을 참조하며 <bean>의 생명주기를 관리하고 여러가지 서비스를 제공.

-스프링프로젝트 전체에서 가장 중요한 역할 담당

-이 설정 파일을 정확하게 작성하고 관리하는 것이 무엇보다 중요

-스프링 설정파일 이름은 어떤 것을 사용해도 무관하지만, <beans>를 루트엘리먼트로 사용해야함.

-<beans>엘리먼트 시작태그에 네임스페이스를 비롯한 xml스키마 관련정보가 설정됨

-<bean>, <descriptrion>, <alias>, <import> 자식 엘리먼트



<import>엘리먼트

-스프링 설정파일 하나에 우리가 만든 모든 클래스를 <bean>으로 등록하고 관리할 수 도 있지만 <bean>외에도 예외처리, 다국어 처리 등 복잡하고 다양한 설정 필요

-따라서 기능별 여러 XML파일로 나누어 설정하는 것이 더 효율적

-이렇게 분리하여 작성한 설정 파일들을 하나로 통합할 때 사용하는 엘리먼트

예시)

-context-datasource.xml : <beans> DataSource 관련 설정 </bean>

-context-transaction.xml:  <beans> Transation 관련 설정 </bean>


applicationContext.xml

<beans>

<import resource="context-datasource.xml"/>

<import resource="context-transaction.xml"/>

</beans>


파일을 가져다 심는 느낌... 

<import>태그를 이용해서 여러 스프링 설정 파일을 포함함으로써 한 파일에 작성하는 것 같은 효과를 낼 수 있음



<bean>엘리먼트

스프링 설정 파일에 클래스를 등록하기 위해서는 <bean> 엘리먼트를 사용

 id 속성 

 - 객체를 위한 이름을 지정할 때 사용하는 속성

 - 컨테이너로부터 <bean> 객체를 요청할 때 사용

 - 반드시 스프링 컨테이너가 생성한 개체들 사이에서 유일해야 함

==> 컨테이너가 각 객체를 식별할 수 있도록

 - 생략가능

 - 자바의 식별자 작성규칙을 따라 만듦: 낙타표기법(Camel Case)

  (숫자로 시작X , 공백포함X , 특수기호 사용X)

 name 속성

 - id와 같은 기능을 하는 속성

 - id와 다르게 식별자 작성 규칙을 따르지 않는 문자열도 허용

 - 특수기호가 포함된 아이디를 지정할 때는 id 대신 name 속성 사용

 - id와 마찬가지로 전체 스프링 파일 내에서 유일해야함 

 - name보다 id를 선호하는 이유 : 어느정도의 규칙을 따르기 때문에 id를 더 많이 사용

 class 속성

 - 반드시 써 줘야 함

 - 정확한 패키지 경로와 클래스 이름을 지정해 줘야 함 


<bean>엘리먼트 속성


 init-method 속성 

 -스프링 컨테이너는 스프링 설정파일에 등록된 클래스를 객체 생성할 때 디폴트 생성자를 호출함

 -객체 생성 후에 멤버변수 초기화 작업이 필요한 경우 사용

 <bean id="아이디" class="클래스주소" init-method="init메소드 이름"/>

 destroy-method 속성 

 스프링 컨테이너가 객체를 삭제하기 직전에 호출될 임의의 메소드를 지정할 수 있음

 <bean id="아이디" class="클래스주소" destroy-method="메소드 이름"/>

 lazy-init 속성 

 -컨테이너가 구동되는 시점에 스프링 설정파일에 등록된 <bean>들을 생성하는 즉시로딩 방식으로 동작

 - 어떤 <bean>은 자주 사용되지 않음에도 메모리를 많이 차지하여 시스템에 부담을 주는 경우가 종종 발생

 - 스프링 컨테이너가 구동되는 시점이 아닌 해당 <bean>이 사용되는 시점에 객체를 생성하도록 하는 기능

 - 메모리 관리를 효율적으로 할 수 있음

 <bean id="아이디" class="클래스주소" lazy-init="true"/>

(true로 설정해 놓으면 클라이언트가 요청하는 시점에 생성

 scope 속성 

 - 하나만 생성돼도 상관없는 객체가 존재

 - 클래스로부터 객체를 생성하는 쪽에서 싱글톤 객체로 생성하는 방향이 가장 바람직

 - scope 속성이 객체를 싱글톤으로 생성해주는 기능 제공

<bean id="아이디" class="클래스주소" scope="singleton"/>

(scope속성값은 기본이 싱글톤, scope가 없을 경우 자동으로 싱글톤)


<bean id="아이디" class="클래스주소" scope="prototype"/>

(prototype으로 지정할 경우 스프링 컨테이너는 해당 <bean>이 요청될 때마다 매번 새로운 객체를 생성하여 반환)


반응형