스프링 프레임워크에서 메타데이터는 애플리케이션의 설정과 관련된 정보를 말하며, 이를 통해 스프링 컨테이너는 애플리케이션에서 어떤 빈(Bean)을 생성하고 관리할지 결정합니다. 스프링에서는 메타데이터를 여러 방식으로 정의할 수 있습니다. 그 중 자바 기반의 설정과 어노테이션 기반의 설정은 주요한 두 가지 방식입니다.
1. 자바 기반의 Configuration 메타데이터
자바 기반의 설정은 XML 기반의 설정을 대체하거나 보완하는 방법으로, 스프링 3.0부터 지원되었습니다. 이 방식에서는 자바 클래스를 사용하여 스프링 빈을 정의하고, 애플리케이션 컨텍스트를 설정할 수 있습니다.
자바 기반의 설정에서 메타데이터는 주로 @Configuration과 @Bean 애노테이션을 사용하여 정의됩니다.
주요 어노테이션
- @Configuration: 이 애노테이션을 사용하여 자바 클래스를 스프링 설정 클래스(Configuration Class)로 표시합니다. 이 클래스는 스프링 컨테이너에 의해 관리되며, 내부에 정의된 빈들을 스프링 컨텍스트에 등록합니다.
- @Bean: 이 애노테이션은 메서드에 적용되어, 해당 메서드가 반환하는 객체를 스프링 컨테이너에 빈으로 등록합니다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyService(myRepository()); // MyService를 빈으로 등록
}
@Bean
public MyRepository myRepository() {
return new MyRepository(); // MyRepository를 빈으로 등록
}
}
- AppConfig 클래스는 @Configuration 애노테이션으로 스프링 설정 클래스임을 나타냅니다.
- myService()와 myRepository() 메서드는 각각 @Bean 애노테이션을 가지고 있으며, 이 메서드들이 반환하는 객체들은 스프링 컨테이너에 의해 빈으로 관리됩니다.
2. 어노테이션 기반의 메타데이터
스프링은 다양한 어노테이션을 통해 빈의 스캔 및 관리를 자동화할 수 있습니다. 컴포넌트 스캔(Component Scan) 기능을 활용하여 특정 패키지를 스캔하고, @Component, @Service, @Repository, @Controller 등의 애노테이션이 붙은 클래스를 자동으로 빈으로 등록할 수 있습니다.
주요 어노테이션
- @Component: 일반적인 스프링 빈으로 등록될 클래스를 표시합니다.
- @Service: 비즈니스 로직을 처리하는 서비스 레이어의 빈으로 등록될 클래스를 표시합니다. @Component와 기능적으로 동일하지만, 의미적으로 구분하기 위해 사용됩니다.
- @Repository: 데이터 접근 계층(DAO)의 빈으로 등록될 클래스를 표시합니다. 데이터베이스와의 상호작용을 처리하는 클래스에 주로 사용됩니다.
- @Controller: 웹 애플리케이션의 컨트롤러 레이어에서 사용됩니다. 웹 요청을 처리하고, 뷰를 반환하는 역할을 합니다.
- @RestController: RESTful 웹 서비스를 위한 컨트롤러 클래스를 나타냅니다. 주로 JSON 또는 XML 데이터를 반환합니다.
import org.springframework.stereotype.Component;
@Component
public class MyComponent {
public void doSomething() {
System.out.println("Component is doing something.");
}
}
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration
@ComponentScan(basePackages = "com.example")
public class AppConfig {
// 컴포넌트 스캔을 통해 com.example 패키지의 모든 @Component 등을 자동으로 스캔하고 빈으로 등록
}
- @Component 애노테이션이 붙은 MyComponent 클래스는 스프링 컨테이너에 의해 자동으로 빈으로 등록됩니다.
- AppConfig 클래스는 @ComponentScan을 사용하여 특정 패키지에서 @Component 애노테이션이 붙은 클래스를 자동으로 스캔하고 빈으로 등록합니다.
요약
- 자바 기반의 Configuration 메타데이터: @Configuration과 @Bean 애노테이션을 사용하여 자바 클래스를 스프링 설정 클래스로 만들고, 메서드를 통해 빈을 등록합니다. 이는 XML 기반 설정을 대체하는 현대적인 설정 방법입니다.
- 어노테이션 기반의 메타데이터: @Component, @Service, @Repository, @Controller와 같은 어노테이션을 사용하여 빈을 정의하고, 스프링 컨테이너에 의해 자동으로 스캔되고 관리되도록 합니다. @ComponentScan을 사용하면 특정 패키지에서 이러한 어노테이션을 스캔하여 빈으로 등록할 수 있습니다.
'Spring Framework' 카테고리의 다른 글
AOP(Aspect-Oriented Programming)의 중요한 세 가지 기술 (0) | 2024.08.19 |
---|---|
"Eager"(즉시 모드)와 "Lazy"(지연 모드) (0) | 2024.08.11 |
빈 팩토리(BeanFactory)와 팩토리 빈(FactoryBean) (0) | 2024.08.11 |
스프링 프레임워크의 핵심 3대 요소 (0) | 2024.08.11 |
Dependency Injection (DI : 의존성주입) (0) | 2024.08.07 |