반응형
1. @Autowired
- 멤버변수 선언 위에 @Autowired → 스프링에 의해 DI (의존성 주입) 됨
@Component
public class ProductService {
@Autowired
private ProductRepository productRepository;
// ...
}
- '빈' 을 사용할 함수 위에 @Autowired → 스프링에 의해 DI 됨
@Component
public class ProductService {
private final ProductRepository productRepository;
@Autowired
public ProductService(ProductRepository productRepository) {
this.productRepository = productRepository;
}
// ...
}
> @Autowired 적용 조건
- 스프링 컨테이너에 의해 관리되는 클래스에서만 가능
> @Autowired 생략 조건
- Spring 4.3 버젼 부터 @Autowired 생략가능
- 생성자 선언이 1개 일 때만 생략 가능
❕파라미터가 다른 생성자들
public class A {
@Autowired // 생략 불가
public A(B b) { ... }
@Autowired // 생략 불가
public A(B b, C c) { ... }
}
- Lombok 의 @RequiredArgsConstructor 를 사용하면 다음과 같이 코딩 가능
@RequiredArgsConstructor // final로 선언된 멤버 변수를 자동으로 생성합니다.
@RestController // JSON으로 데이터를 주고받음을 선언합니다.
public class ProductController {
private final ProductService productService;
// 생략 가능
// @Autowired
// public ProductController(ProductService productService) {
// this.productService = productService;
// }
}
2. ApplicationContext
- 스프링 IoC 컨테이너에서 빈을 수동으로 가져오는 방법
@Component
public class ProductService {
private final ProductRepository productRepository;
@Autowired
public ProductService(ApplicationContext context) {
// 1.'빈' 이름으로 가져오기
ProductRepository productRepository = (ProductRepository) context.getBean("productRepository");
// 2.'빈' 클래스 형식으로 가져오기
// ProductRepository productRepository = context.getBean(ProductRepository.class);
this.productRepository = productRepository;
}
// ...
}
반응형
'I LEARNED > TIL' 카테고리의 다른 글
TIL_@Column #Spring (0) | 2022.08.07 |
---|---|
TIL_@RequestMapping #Spring (0) | 2022.08.06 |
TIL_ 스프링 IOC 컨테이너 -빈등록 (0) | 2022.08.05 |
TIL_ResponseBody #Spring (0) | 2022.08.04 |
[TIL] SpringMVC동작이해 (0) | 2022.08.04 |
댓글