코딩 이래요래
Spring Boot에서 사용되는 다양한 Bean 등록 방법 본문
Spring Boot - Bean 개념과 등록 방법 정리
1. Bean이란?
- Spring IoC Container에 의해 관리하는 객체를 말함
- Spring에서는 개발자가 직접 생성하고 관리하던 객체들을 IoC Container가 대신 생성하고 생명주기 까지 관리하며, 이렇게 등록된객체를 Bean이라고 함
2. IoC Container란?
- IoC (Inversion of Control, 제어의 역전) 이란, 객체 생성과 의존성 주입(Dependency Injection, DI) 제어권을 개발자가 아닌 Spring IoC Container에 위임하는 개념
- 덕분에 개발자는 객체 간 관계에 신경 쓰지 않고, 비즈니스 로직 구현에 집중할 수 있음
3. ApplicationContext란?
- ApplicationContext는 Spring IoC Container의 최상위 인터페이스인 BeanFactory를 상속받아 확장한 인터페이스
- BeanFactory : 가장 기본적인 IoC Container 기능 (Bean 생성, DI 관리)
- ApplicationContext : BeanFactory의 기능에 더해 메세지 소스 처리, 이벤트 발행, 다양한 애플리케이션 스코프 지원 등 추가 기능을 제공
💡일반적으로 SpringBoot에서는 ApplicationContext를 통해 Bean을 조회하거나 애플리케이션 전반의 환경 설정을 관리함
Spring Boot - Bean 등록 방법
1. 어노테이션 기반 등록 (@Component 계열)
Spring은 @ComponentScan을 통해 특정 패키지 이하에 있는 클래스 중 @Component 어노테이션이 붙은 클래스를 찾아 자동으로 Bean으로 등록함
대표 어노테이션
- @Component
- @Controller
- @Service
- @Repository
* 위 어노테이션들은 모두 내부적으로 @Component를 포함하고 있음
💡SpringBoot는 기본적으로 @SpringBootApplication이 선언된 클래스의 패키지 하위를 스캔함
- @SpringBootApplication은 @ComponentScan을 포함하고 있음
- @SpringBootApplication 클래스가 최상단 패키지에 없으면, @ComponentScan(basePackages = "path")를 명시해줘야함
2. 수동 등록 - @Configuration + @Bean
- @Configuration 클래스 내부에서 @Bean 메서드를 정의하여 Bean으로 등록함
@Configuration
public class AppConfig {
@Bean
public ExampleComponent exampleComponent() {
return new ExampleComponent(); // return하는 객체를 Bean으로 등록함
}
}
- 복잡한 객체 생성 로직이 필요할 때 사용함
3. XML 기반 등록 (권장되지 않음)
- Java 클래스
public class Dog {
public void bark() {
System.out.println("멍멍!");
}
}
2. XML 파일 (applicationContext.xml)
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- Dog 클래스를 Bean으로 등록 -->
<bean id="dog" class="com.example.Dog"/>
</beans>
- <bean> 태그로 등록
3. Java 코드에서 Bean 사용
public class Main {
public static void main(String[] args) {
// XML 설정 파일을 읽어서 Spring Container 생성
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
// id가 "dog"인 Bean을 가져오기
Dog dog = context.getBean("dog", Dog.class);
// 사용
dog.bark(); // 출력: 멍멍!
}
}
- ClassPathXmlApplicationContext를 통해 작성한 xml 설정 파일을 읽어 container 생성
- context를 이용해 등록한 bean을 꺼내와 사용
'위클리 페이퍼' 카테고리의 다른 글
위클리 페이퍼 8주차 (3) | 2025.05.30 |
---|---|
위클리 페이퍼 - 7주차 (3) | 2025.05.25 |
AOP (Aspect Oriented Programming) (0) | 2025.05.18 |
@Controller vs @RestController (0) | 2025.05.13 |
Web Server ?? Web Application Server?? (0) | 2025.04.29 |