1. Bean
- Spring Container(Application Context) 관리하는 객체
- Application Context : 객체(Bean) 저장소, Bean을 저장, 관리(생성, 소멸, 연결), Map의 형태로 저장
- BeanFactory(부모) - Bean(객체)을 생성, 연결 등의 기본 기능을 정의
- ApplicationContext(자식) - BeanFactory를 확장해서 여러 기능을 추가 정의
2. ApplicationContext의 종류
- Spring Boot에서는 Java Config를 사용하면 된다.
3. ApplicationContext의 주요 메서드
4. 실습
- Main 클래스
@ToString
class Car{
Engine engine;
Door door;
}
class Engine {}
class Door {}
public class Main {
public static void main(String[] args) {
// AC를 생성 - AC의 설정파일은 AppConfig.class 자바설정
ApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class);
// Car car = (Car)ac.getBean("car"); // byName 객체(빈)을 조회
Car car = ac.getBean("car", Car.class); // 위와 동일
System.out.println("car = " + car);
Engine engine = ac.getBean(Engine.class);
Engine engine2 = ac.getBean(Engine.class);
Engine engine3 = ac.getBean(Engine.class);
System.out.println("engine = " + engine);
System.out.println("engine2 = " + engine2);
System.out.println("engine3 = " + engine3);
}
}
- AppConfig.java - 설정파일
@Configuration
public class AppConfig {
@Bean
Car car(){
return new Car();
}
@Bean
Engine engine(){
return new Engine();
}
@Bean
Door door(){
return new Door();
}
}
- @Configuration으로 이 파일이 설정파일임을 명시해주고, @Bean으로 Bean객체 등록을 해주었다.
- Engine의 주소가 동일하게 나오는데, 이는 기본 @Scope 설정이 Singleton이라서 그렇다.
- @Scope를 prototype으로 바꿔주면...
@Bean
@Scope("prototype")
Engine engine(){
return new Engine();
}
- 주소가 다르게 나온다.
// Bean이 몇개나 등록되어있는가
System.out.println("ac.getBeanDefinitionCount() = " + ac.getBeanDefinitionCount());
// 등록된 Bean의 이름
System.out.println("ac.getBeanDefinitionNames() = " + Arrays.toString(ac.getBeanDefinitionNames()));
// engine이라는 BeanDefinition이 있는지
System.out.println("ac.containsBeanDefinition(\"engine\") = " + ac.containsBeanDefinition("engine"));
// Bean 객체 Car의 @Scope가 Singleton인지아닌지
System.out.println("ac.isSingleton(\"car\") = " + ac.isSingleton("car"));
// Bean 객체 Engine의 @Scope가 prototype인지 아닌지
System.out.println("ac.isPrototype(\"engine\") = " + ac.isPrototype("engine"));
- ac.getBeanDefinitionNames()
- Bean으로 등록된 객체들의 이름이 나온다
'Spring DI, AOP' 카테고리의 다른 글
6. 의존성 관리와 설정의 자동화(1) - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.24 |
---|---|
5. Spring 애너테이션 - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.24 |
3. Spring DI의 원리(2) - 패스트캠퍼스 백엔드 부트캠프 3기 (2) | 2025.02.23 |
2. Java Reflection API - 패스트캠퍼스 백엔드 부트캠프 3기 (2) | 2025.02.21 |
1. Spring DI의 원리(1) - 패스트캠퍼스 백엔드 부트캠프 3기 (0) | 2025.02.20 |