Million Dreams
100만개의 꿈을 꾸는 개발자 지망생
Spring Framework (2)
스프링 컨테이너(Spring Container)를 만드는 2가지 방법 (XML, Annotation)

앞서 DI를 설명하면서 XML으로 빈을 구성해 컨테이너를 만드는 방법에 대해 간단히 설명한 바 있다.

 

기본적으로 XML파일로 컨테이너를 구성할 때는 XML파일에 Bean 태그를 통해 컨테이너 요소들을 설정하고,

컨테이너를 만들때는 GenericXmlApplication 객체를 통해 XML파일을 불러와 컨테이너를 구성한다. 

 

- GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:config.xml");

 

- 컨테이너를 구성했으면 getBeans()메소드를 사용해 xml에서 빈으로 구성해놓은 클래스들을 가져온다.

(이때, getBeans 메소드의 파라미터는 xml 파일내의 Bean 태그의 id와 같아야 한다.)

 

- getBean으로 Bean을 갖고오는데 성공했다면 Bean 클래스들의 실행하고 싶은 메소드들을 실행후,

close를 통해 닫아준다. (ctx.close())

 

-------------------------------------------------------------------------------------------------------

 

반면 Annotation 방식을 사용해 컨테이너를 구성하는 방법도 있다.

 

Annotaion 방식은 XML이 파일이 필요없고, 해당하는 컨테이너로 만들고 싶은 클래스 위에 @Configuration을 붙여주면 된다.

 

1
2
3
4
5
6
7
8
@Configuration
public class a {
 
@Bean
public User user1() {
return new User("aaaaa""1234");
}

(@Configuration을 사용해 Container를 구성한다.)

 

Container 내에는 @Bean을 사용할 수 있는데. @Bean의 역할은 빈 객체를 생성하는 메소드에 사용되어  메서드의 리턴 값을 빈 객체로 사용할 수 있다.

위의 예에서는 user1() 메서드가 생성하는 객체를 빈 객체로 사용하고 메소드 이름인 user1을 빈 객체의 이름으로 사용한다.

 

메인에서 사용할때는 XML때와 달리  AnnotationConfigApplicationContext 객체를 사용해 불러올 수 있다.

 

1
2
AnnotationConfigApplicationContext ctx =
new AnnotationConfigApplicationContext(Config.class);

 

두가지 방식의 특징은 다음과 같다.

* XML 설정

- 설정 정보를 변경할 때에는 XML만 변경하면 된다.

- 많은 프레임워크/라이브러리 XML 스키마를 이용한 설정의 편리함을 지원한다.

- (IDE의 코드 자동 완성 기능이 빈약하면) XML 작성 과정이 다소 번거롭다.

- 코드를 실행해야 설정 정보 오류를 확인할 수 있다.

 

* Annotation 방식

- 컴파일러의 도움을 받기 때문에, 오타 등의 설정 정보 오류를 미리 알 수 있다.

- 자바 코드이기 때문에 IDE가 제공하는 코드 자동 완성 기능의 도움을 받을 수 있다.

- 설정 정보를 변경하려면 자바 코드를 재컴파일해주어야 한다.

- XML 스키마 기반의 설정을 지원하는 프레임워크/라이브러리 중 아직 자바 기반의 편리한 설정을 지원하지 않은 경우가 있다.

 

 

 

 

 

 

 

 

'Spring Framework' 카테고리의 다른 글

스프링(Spring Framework)이란?  (0) 2020.02.27
  Comments,     Trackbacks
스프링(Spring Framework)이란?

참고 사이트 : https://spring.io/

 

Spring

Level up your Java code and explore what Spring can do for you.

spring.io

· 자바개발자로서 거의 필수적으로 배워야 할만큼 다양한 영역에서 사용되는 프레임워크(국내에선 업계 표준 프레임워크 수준)다. 

 

· 스프링 프레임워크는 기능에따라 다양한 모듈로 나뉘어 있어서 각 모듈의 역할을 기본적으로 알고 있어야 활용할 수 있다.

 

※ 주요 모듈 목록은 다음과 같다.

  • spring-beans : 컨테이너 객체 생성
  • spring-context : 객체생성, 라이프 사이클 처리, 스키마 확장 등
  • spring-aop : AOP(Aspect Oriented Programming) 기능 제공
  • spring-web : 웹 개발 필요 기반 기능 제공 
  • spring-webmvc : 스프링 기반 MVC 프레임워크 (컨트롤러 뷰 구현 등을 제공)
  • spring-websocket : MVC에서 웹소켓 연동처리 지원
  • spring-oxm : XML과 자바 객체간 매핑 처리 지원
  • spring-tx : 트랜잭션 관리 지원
  • spring-jdbc : JDBC 프로그래밍 지원
  • spring-orm : 하이버네이트, JPA, MyBatis 등 연동 지원
  • spring-jms : JMS(Java Message Server)와 연동 지원
  • spring-context-support : 각종 부가기능(스케줄링, 메일 발송, 캐시 연동, 벨로시티 등) 지원

위와 같은 모듈들은 각자 서로 유기적으로 연결되어 있는 의존관계(Dependency)에 있는데

서로 역할에 따라 어떻게 의존하고 있는지 알면 Spring의 구조와 프로세스를 이해하기 쉽다.

 

(완전한 모듈 목록은 https://github.com/spring-projects/spring-framework에서 볼 수 있다.)

 

- Spring 프로젝트는 일반적으로 Maven Project를 사용하며, Maven Project에서 모듈을 사용하려면

XML 파일에서 다음과 같이 선언해주면 된다.

 

1
2
3
4
5
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>4.0.4.RELEASE</version>
</dependency>

(위 소스는 spring-context 모듈을 XML에 선언한 예시이다.)

 

앞으로 새로운 것을 배울 때마다 관련 내용 정리해서 포스팅 할 예정.

 

 

 

 

  Comments,     Trackbacks