Sparta/What I Learned

22.12.27

코딩하는 또롱이 2022. 12. 28. 11:49

📌 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()); // 내림차순

 

 

 

 

'Sparta > What I Learned' 카테고리의 다른 글

22.12.29  (0) 2022.12.29
22.12.28  (0) 2022.12.28
22.12.26  (0) 2022.12.28
22.12.25  (0) 2022.12.26
22.12.23  (0) 2022.12.26