-
Spring Boot에서 사용되는 다양한 Bean 등록 방법Spring&SpringBoot 2025. 2. 10. 09:23
Spring Boot에서 사용되는 다양한 Bean 등록 방법들과 각각의 장단점을 표로 정리하고, 가장 많이 이용되는 두 가지의 예시를 작성해둔 문서입니다.
Spring Boot에서 Bean을 등록하는 방법 자동 등록 수동 등록 활용 상황 @Component 계열 어노테이션으로 Bean 등록 ✅ ❌ 일반적인 Spring Boot 프로젝트 Java 설정을 통한 Bean 등록 ❌ ✅ 외부 라이브러리 또는 복잡한 의존성 관리 필요 XML 설정을 통한 Bean 등록 ❌ ✅ 레거시 프로젝트 유지보수 @Import를 사용한 Bean 등록 ✅ ✅ 설정 클래스를 묶어서 관리 FactoryBean을 사용한 동적 Bean 등록 ✅ ✅ 특정 조건에 따른 동적 객체 생성 ApplicationContext.registerBean를 통한 동적 Bean 등록 ❌ ✅ 런타임에 Bean 추가 필요 @Conditional을 사용한 조건부 Bean 등록 ✅ ✅ 설정값에 따라 Bean을 동적으로 주입 ChatGPT에게 부탁한 표 정리입니다! 깔끔하게 나와서 첨부합니다.
이 중 이용도가 높은 건 @Component 계열 어노테이션으로 Bean 등록 과 @Bean을 사용한 수동 등록이고, Java 설정을 통한 Bean 등록 이 가장 많이 이용됩니다.
XML 설정을 통한 Bean 등록은 레거시 프로젝트 유지보수라고 작성되어 있는데, 이제는 거의 사장된 방식이라고 생각하면 됩니다.
1. @Component 계열 어노테이션으로 Bean 등록
스트레오 타입 어노테이션 종류
@Component : 일반적인 Bean 등록
@Service : 서비스 계층에서 사용
@Repository : DAO 또는 Repository 계층에서 사용 (예외 변환 기능 포함)
@Controller / @RestController : 웹 컨트롤러
예시
package com.example.demo.component; @Component public class MyComponent { public void doSomething() { System.out.println("Hello from MyComponent"); } }
package com.example.demo.controller; @Controller public class AppController { private final Service service; ... (구현) ... } --- package com.example.demo.service; @Service public class Service { private final repository Repository; ... (구현) ... } --- package com.example.demo.repository; @Repository public class Repository { ... (구현) ... }
자동 등록 메커니즘
package com.example.demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication // @EnableAutoConfiguration + @ComponentScan + @Configuration public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } }
@SpringBootApplication 어노테이션이 적용된 클래스의 현재 패키지와 하위 패키지에 있는 @Component 계열 어노테이션이 붙은 클래스를 모두 Bean으로 등록합니다.
// 폴더 구조 src └── main └── java └── com └── example └── demo ├── MyApplication.java ← @SpringBootApplication 어노테이션이 있는 클래스 (기본 패키지) ├── controller │ └── AppController.java ← @Controller 어노테이션 (com.example.demo.controller) ├── service │ └── MyService.java ← @Service 어노테이션 (com.example.demo.service) └── repository └── UserRepository.java ← @Repository 어노테이션 (com.example.demo.repository) └── component └── MyComponent.java ← @Component 어노테이션 (com.example.demo.component)
2. Java 설정을 통한 Bean 등록
Java 설정을 통한 Bean 등록에서 쓰이는 어노테이션과 스프링 컨테이너
@Configuration : 이 어노테이션이 붙은 클래스는 스프링 IoC 컨테이너에 의해 설정(Configuration) 클래스로 인식됩니다.
@Bean : @Configuration 클래스 내에서 Bean을 정의하고자 할 때 사용하는 메서드 레벨 어노테이션입니다.
AnnotationConfigApplicationContext : 자바 설정을 로드하기 위한 스프링 컨테이너 구현체(=스프링 컨텍스트라고 부른다)입니다.
@Configuration // 스프링이 관리하는 설정 클래스 public class AppConfig { // @Bean 메서드가 두 번 이상 호출되어도 // 실제 생성되는 Bean은 싱글톤으로 하나만 유지됨 @Bean public Service Service() { return new ServiceImpl(); } }
public class Main { public static void main(String[] args) { // AnnotationConfigApplicationContext를 사용해 자바 설정 파일을 로드 AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); // 빈 가져오기 Service service = context.getBean(Service.class); System.out.println(service.getServiceName()); // 컨텍스트 닫기 context.close(); } }
AnnotationConfigApplicationContext는 폴더 구조와 관계없이 사용할 수 있습니다.
AnnotationConfigApplicationContext를 통해 AppConfig.class 설정 클래스를 로드하여 스프링 컨텍스트 (스프링 IoC 컨테이너와 같은 개념) 를 생성하고 빈을 관리합니다.
context.getBean(Service.class) 컨테이너에서 Service 타입의 빈을 가져오는 AnnotationConfigApplicationContext의 메서드입니다.
'Spring&SpringBoot' 카테고리의 다른 글
Spring Boot 애플리케이션 설정과 DB 설정 (0) 2025.02.27 Spring MVC @Controller와 @RestController의 차이점 (0) 2025.02.17 Spring에서 AOP(Aspect Oriented Programming)가 필요한 이유 (0) 2025.02.17 Spring Framework가 탄생하게 된 배경 (0) 2025.02.03 Gradle을 사용한 Spring Boot 프로젝트의 구조와 설정 (1) 2025.01.31