반응형
[여기에 적은 거는 강의 내용을 다 적은게 아니라서 강의자료 보면서 이 게시글 참고하자.]
[스프링 심화 강의 1주차 16강 스프링 IoC 컨테이너 사용하기]
- springCore 프로젝트에서 실습
스프링 IoC 컨테이너
👉 1주차 15강에서 DI 를 사용했을 때의 장점을 살펴 보았습니다.
- 그런데 DI 를 사용하기 위해서는 객체 생성이 우선 되어야 했습니다. 과연 어디서 객체 생성을 해야 할까요? 바로 스프링 프레임워크가 필요한 객체를 생성하여 관리하는 역할을 대신해 줍니다.
- 빈 (Bean): 스프링이 관리하는 객체
- 스프링 IoC 컨테이너: '빈'을 모아둔 통
그럼 스프링 IoC 컨테이너에 어떻게 빈을 등록하고 사용하는지 확인해 보겠습니다.
스프링 '빈' 등록 방법
- @Component
- 클래스 선언 위에 설정
@Component
public class ProductService { ... }
- 스프링 서버가 뜰 때 스프링 IoC 에 '빈' 저장
- @Component 클래스에 대해서 스프링이 해 주는 일
// 1. ProductService 객체 생성
ProductService productService = new ProductService();
// 2. 스프링 IoC 컨테이너에 빈 (productService) 저장
// productService -> 스프링 IoC 컨테이너
- 스프링 '빈' 이름: 클래스의 앞글자만 소문자로 변경
- public class ProductServcie → productServcie
- '빈' 아이콘 확인 → 스프링 IoC 에서 관리할 '빈' 클래스라는 표시
스프링 '빈' 사용 방법
- @Autowired
- 멤버변수 선언 위에 @Autowired → 스프링에 의해 DI (의존성 주입) 됨
@Component
public class ProductService {
@Autowired
private ProductRepository productRepository;
// ...
}
'빈' 을 사용할 함수 위에 @Autowired → 스프링에 의해 DI 됨
- @Autowired는 생성자 위에 써서 빈에 있는 클래스를 가져오겠다.
@Component
public class ProductService {
private final ProductRepository productRepository;
@Autowired
public ProductService(ProductRepository productRepository) {
this.productRepository = productRepository;
}
// ...
}
- @Autowired 적용 조건
- 스프링 IoC 컨테이너에 의해 관리되는 클래스에서만 가능
Lombok 의 @RequiredArgsConstructor 를 사용하면 다음과 같이 코딩 가능
- @RequiredArgsConstructor는 final로 선언된 멤버변수의 생성자를 자동으로 생성
- @RequiredArgsConstructor 좋지만 아직 배우는 단계이니깐 @Autowired 쓰자.
@RequiredArgsConstructor // final로 선언된 멤버 변수를 자동으로 생성합니다.
@RestController // JSON으로 데이터를 주고받음을 선언합니다.
public class ProductController {
private final ProductService productService;
// 생략 가능
// @Autowired
// public ProductController(ProductService productService) {
// this.productService = productService;
// }
}
반응형
'JAVA' 카테고리의 다른 글
[JAVA/SpringBoot] 스프링 프레임워크 재이해 (1-18)★ (0) | 2022.05.29 |
---|---|
[JAVA/SpringBoot] 스프링 3계층 Annotation 적용하기 (1-17) (0) | 2022.05.28 |
[JAVA/SpringBoot] DI (의존성 주입) 의 이해 (1-15) (0) | 2022.05.28 |
TIL_항해99_19일차 (0) | 2022.05.28 |
[JAVA/SpringBoot] 객체 중복 생성 문제 해결 (1-14) (0) | 2022.05.27 |