Million Dreams
100만개의 꿈을 꾸는 개발자 지망생
스프링MVC (3)
스프링 컨테이너(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
DI(Dependency Injection)란? 2. Property 방식

앞서 DI에는 2가지 방식이 있다고 말했으며 생성자(Constructor) 방식에 대해서 소개한 바 있다.

이번에는 2번째 방식인 Property 방식인데

Property 방식은 <property> 태그를 사용하며, name 속성을 이용해 프로퍼티 이름을 지정한다.

Value 혹은 Ref 태그를 사용해 값을 설정할 수 있다.

 

1
2
3
<bean id=class=a>
<property name="anum" value="1" />
</bean>
1
2
3
<bean id=b class=b>
<property name="bnum" ref="a" />
</bean>

(property 방식 지정 예시)

 

Property 방식은 다른 이름으로 setter 방식이라고도 하는데 setproperty이름() 형식의 메서드를 이용해 값을 설정하는 것이 일반적이다.

 

ex) setAnum(1)

setBnum(a)

 

XML을 통해 DI 설정을 하였다면

컨테이너를 만드는 방법으로 GenericXmlApplicationContext 클래스를 사용한다.

 

1
2
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:config.xml");
 
http://colorscripter.com/info#e" target="_blank" style="color:#4f4f4ftext-decoration:none">Colored by Color Scripter

GenericXmlApplicationContext 객체 생성 예시

(config.xml 파일을 참조해 컨테이너를 생성한다.)

 

ctx 말고도 Annotation 방식이 있는데 Annotation 방식은 뒷장에 설명할 예정이다.

 

  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