📌 DI(의존성 주입)
다른 repository에 전부 new로 생성해주는 것이 아닌, 만들어둔 하나의 객체를 재사용 하는 것.
📌DI를 사용하려면 객체를 생성하는게 우선인데 이 기능을 스프링 프레임워크가 객체를 생성하고 관리한다.
스프링 프레임워크가 생성하는 객체를 빈이라고 하며, 이렇게 스프링 프레임워크가 관리하는 데이터(빈)들을 담아두는 저장공간을 IoC 컨테이너라고 한다.
🫘 빈을 자동으로 달려면 @Companent 어노테이션을 달아주거나
이렇게 직접 등록 해 줄 수 있다.
만들어진 빈을 사용하고 싶으면 사용할 함수 위에다가 @Autowired 어노테이션을 달아주면 된다.
이렇게!
📌@Autowired 적용 조건
스프링 IoC 컨테이너에 의해 관리되는 클래스에서만 가능
📌@Autowired 생략 조건
- Spring 4.3 버젼 부터 @Autowired 생략가능
- 생성자 선언이 1개 일 때만 생략 가능
✍️ 파라미터가 다른 생성자들
public class A {
@Autowired // 생략 불가
public A(B b) { ... }
@Autowired // 생략 불가
public A(B b, C c) { ... }
}
- Lombok 의 @RequiredArgsConstructor 를 사용하면 다음과 같이 코딩 가능
@RestController
@RequiredArgsConstructor // final로 선언된 멤버 변수를 자동으로 생성합니다.
public class ProductController {
private final ProductService productService;
// 생략 가능
// @Autowired
// public ProductController(ProductService productService) {
// this.productService = productService;
// }
}
🫘 스프링 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;
}
// ...
}
오늘의 타임어택
ArrayList에서 sort를 쓰려면 Comparator를 import 해주고 아래처럼 쓴다.
import java.util.Comparator;
list.sort(Comparator.naturalOrder()); // 오름차순
list.sort(Comparator.reverseOrder()); // 내림차순