JavaConfig 클래스란?
@Configuration을 붙인 클래스를 말함
Bean 취득 방법
1. 인수 주입
@Configuration
public class UserServiceConfig {
@Bean
public UserService userService(UserRepository repository) { // (1)
return new SimpleUserService(repository);
}
}
(1)에서와 같이, UserRepository 타입의 객체를 인수로 받도록 @Bean 메서드를 정의한다.
그러면, DI 컨테이너가 해당하는 객체를 인수로 주입해 준다.
만약, DI 컨테이너에 해당 타입의 객체가 없다면, 에러가 발생하므로 null을 주입받을 염려는 하지 않아도 된다.
2. @Bean 메서드 호출
@Configuration
public class UserServiceConfig {
@Bean
public UserRepository userRepository() {
return new UserRepository();
}
@Bean
public SimpleUserService simpleUserService() {
return new SimpleUserService(userRepository()); // (1)
}
@Bean
public AdminUserService adminUserService() {
return new AdminUserService(userRepository()); // (2)
}
}
(1)과 (2)에서와 같이, @Bean 메서드를 직접 호출할 수 있다.
메서드를 직접 호출하기 때문에 메서드 호출로 반환된 UserRepository 객체가 서로 다를 것 같아 보이지만, DI 컨테이너가 Bean Scope 설정에 맞게 제공해 준다.
위 코드는, 기본값인 Singleton Scope이므로 (1)과 (2)에서 인수로 주입하는 객체는 동일한다.
만약, UserRepository를 Prototype Scope으로 설정했다면, (1)과 (2)에서 인수로 전달되는 객체는 서로 다르다.
3. 필드 주입
@Configuration
public class UserServiceConfig {
@Autowired
private UserRepository userRepository; // (1)
@Bean
public SimpleUserService simpleUserService() {
return new SimpleUserService(userRepository);
}
@Bean
public AdminUserService adminUserService() {
return new AdminUserService(userRepository);
}
}
(1)에서 붙은 @Autowired로 인해, DI 컨테이너가 필드 주입으로 UserRepository 타입의 객체를 주입해 준다.
'DevLogs > LearningSpring' 카테고리의 다른 글
Spring의 *Aware 인터페이스들에 대한 정리 (2) | 2024.11.13 |
---|---|
MessageSource의 한글 깨짐 해결하기 (0) | 2024.11.13 |
Spring AOP Introduction 기능을 활용하여 Mixin을 구현해 보자 (0) | 2024.11.07 |
@Value 어노테이션에 SpEL 사용법 (0) | 2024.10.31 |