본문 바로가기
boostcource/boostcourse_web programming

xml 파일을 이용한 설정

by sgyeong 2024. 6. 16.

실습을 위해 Eclipse에서 maven 프로젝트를 만들어준다.

 

 

 

 

 

Archetype은 maven project에서 제공해주는 template을 의미한다. 어떤 것을 지정하느냐에 따라서 프로젝트 구조가 달라지고, 예제가 들어있을 수도 있다. maven-archetype-quickstart로 실습을 진행한다.

 

 

 

Group Id는 회사의 도메인 이름을 거꾸로 쓴다. 패키지 만드는 규칙과 비슷하다. 나중에 Group Id와 Artifact Id가 패키지가 될 것이다. 그렇기 때문에 규칙을 지켜주고, 소문자를 사용하는 것이 좋다. 

Artifact Id에는 프로젝트 이름을 적어주면 된다. 

 

 

 

 

 

 

pom.xml 에 jdk 사용을 위해서 플러그인을 설정해준다.

 

 

 

Spring 라이브러리를 추가해준다.

 

 

 

 

설정파일을 편하게 관리하기 위해 diexam01/src/main 에 resources 폴더를 만들어준다.

 

 

 

resources에 Spring에 정보를 주기 위한 applicationContext.xml File을 만들어준다. 

 

 

 

xml 파일에 정보를 입력해준다.

 

 

작성한 Spring 설정 파일을 읽어들이는 객체를 생성하기 위해 클래스를 만들어준다.

 

 

프로그램을 시작시킬 시작점이 필요하기 때문에 메인 메서드를 선택한다.

 

 

spring application context가 객체를 생성하는데 싱글톤 패턴을 이용한다. 사용자가 계속 getBean으로 요청한다 하더라도 그 객체를 계속 만들어내는 것이 아니라 하나 만든 bean을 이용하는 것이다.

 

 

정리

 

applicationContext > interface이다. 즉, applicationContext를 구현하는 다양한 컨테이너가 존재할 것이다. 그 중에서 xml 파일을 클래스패스에서 읽어들여서 사용하는 객체가 클래스패스 xml application context이다.

 

resources 폴더는 main 안에 들어있다. resources 폴더는 source 폴더이다. 그래서 resources 폴더에서 생성한 

xml파일은 자동으로 classpath로 지정이 된다.

java 디렉토리에서 만들어진 클래스와 마찬가지로 bean 디렉토리에 생성되어 있을 것이다. 그렇기 때문에 class xml application context로 읽어서 사용할 수 있다.

class xml application context 인스턴스가 생성될때 생성자 parameter로 지정된 설정파일을 읽어들인 후에 그 안에 선언된 bean들을 모두 메모리에 올려줄 것이다.

class xml application context는 application context xml 파일에 등록해놓은 bean들이 여러개 있을 수 있다. 만약  bean들이 여러개 있다면 application xml이 만들어질때 설정파일에 들어있는 bean의 정보를 다 읽어들여서 bean에 설정되어 있는 객체들을 전부 생성해서 메모리에 올려놓는다. 만약 이때 문제가 발생하면 해당 어플리케이션은 종료가 된다. 

application context가 가지고 있는 getBean 메서드의 parameter로 xml 설정에 적어놨던 id값을 넣어주면 해당 객체의 레퍼런스가 반환된다. getBean은 object 타입으로 리턴을 하게 되고, 그래서 필요에 따라 형변환을 해서 사용해야 한다. 

그래서 아이디로 등록되어 있는 실제 userBean을 얻어내서 얻어낸 bean에 setName으로 값을 지정하고 getName을 이용해서 출력하였다. 

'boostcource > boostcourse_web programming' 카테고리의 다른 글

Spring JDBC  (1) 2024.06.30
xml파일을 이용한 설정-2  (0) 2024.06.21
Spring IoC/DI 컨테이너  (0) 2024.06.16
Spring  (0) 2024.06.15
HTML templating  (0) 2024.06.15