@Configuration
@Configuration 어노테이션은 Spring 애플리케이션의 설정 클래스를 정의하는 데 사용됩니다. 이러한 클래스는 하나 이상의 @Bean 메서드를 포함하여 Spring IoC 컨테이너에서 관리되는 객체(Bean)를 정의합니다.
주요 기능과 동작
- 설정 클래스:
- @Configuration이 적용된 클래스는 Spring 애플리케이션 컨텍스트에 의해 설정 정보로 사용됩니다.
- 이 클래스는 보통 애플리케이션의 환경설정을 Java 코드로 정의하는 데 사용됩니다.
- Bean 정의:
- @Bean 어노테이션이 적용된 메서드는 Spring 컨테이너에 의해 호출되어 Bean 객체를 생성하고 관리합니다.
- @Configuration 클래스 내의 @Bean 메서드는 Bean을 정의하고 이를 Spring 컨텍스트에 등록합니다.
- 싱글톤 보장:
- Spring은 @Configuration 클래스를 CGLIB(또는 다른 프록시 기술)을 사용하여 프록시 객체로 확장합니다. 이를 통해 @Bean 메서드는 단 한 번만 호출되어 동일한 Bean 인스턴스를 반환합니다.
- 예를 들어, 두 개의 @Bean 메서드가 서로를 호출하면, Spring은 같은 Bean 인스턴스를 반환합니다
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class AppConfig {
@Bean
public MyService myService() {
return new MyServiceImpl();
}
@Bean
public MyRepository myRepository() {
return new MyRepositoryImpl();
}
}
@Configurable
@Configurable 어노테이션은 Spring 컨테이너가 직접 관리하지 않는 객체에도 의존성을 주입할 수 있게 해줍니다. 이 어노테이션은 특히 애플리케이션 컨텍스트 밖에서 생성된 객체에 유용합니다.
주요 기능과 동작
- 비-컨테이너 객체의 의존성 주입:
- @Configurable은 Spring 컨테이너에 의해 직접 관리되지 않는 객체에도 의존성을 주입할 수 있게 합니다. 예를 들어, 도메인 객체, 엔티티 객체 등.
- AspectJ 및 LTW(Load-Time Weaving):
- @Configurable 어노테이션을 사용하려면 보통 AspectJ나 Spring의 LTW 설정이 필요합니다. 이는 런타임에 객체의 생명 주기를 관리하고 의존성을 주입하기 위함입니다.
- 주요 사용 사례:
- @Configurable은 JPA 엔티티 객체, 스레드 로컬 객체, 또는 일반적인 애플리케이션 컨텍스트 외부에서 생성된 객체에서 유용하게 사용됩니다.
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Configurable;
@Configurable
public class MyDomainObject {
@Autowired
private MyService myService;
public void doSomething() {
myService.performAction();
}
}
위 예제에서 MyDomainObject 클래스는 @Configurable 어노테이션이 적용되어 있습니다. 이는 Spring이 이 객체의 생명 주기 동안 myService 필드에 자동으로 의존성을 주입할 수 있도록 합니다.
AspectJ 설정 예시
@Configurable을 사용하려면 추가 설정이 필요합니다. 다음은 AspectJ를 사용하여 이를 설정하는 예시입니다.
- AspectJ 디펜던시 추가:
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.EnableAspectJAutoProxy;
import org.springframework.context.annotation.aspectj.EnableSpringConfigured;
@Configuration
@EnableAspectJAutoProxy
@EnableSpringConfigured
public class AppConfig {
// Configuration code here
}
요약
- @Configuration:
- 설정 클래스를 정의하여 Spring 컨테이너에서 Bean을 관리합니다.
- @Bean 메서드를 통해 Bean을 정의하고 싱글톤 보장을 제공합니다.
- 주로 애플리케이션 설정을 Java 코드로 작성할 때 사용됩니다.
- @Configurable:
- Spring 컨테이너가 관리하지 않는 객체에도 의존성을 주입할 수 있게 합니다.
- AspectJ 또는 LTW 설정이 필요합니다.
- 주로 도메인 객체, 엔티티 객체, 애플리케이션 컨텍스트 외부에서 생성된 객체에 사용됩니다.
'프로그래밍 > spring' 카테고리의 다른 글
Jasypt library (0) | 2024.07.28 |
---|---|
@JsonIgnore, @JsonProperty (0) | 2024.06.16 |
Spring Batch 5 (0) | 2024.06.09 |
tomcat 을 대체 하기 위한 undertow (0) | 2024.05.31 |
[JPA] fetch join 사용시 pagination 적용 - subquery 예제 (0) | 2024.05.19 |