Spring Boot (45) 썸네일형 리스트형 @Autowired와 Collection 클래스(List, Map, etc.) 아래 포스팅에서 동일 타입의 빈들이 충돌할 때 어떻게 해결할 수 있는지 확인했습니다. 이번 포스팅은 의도적으로 해당 타입의 스프링 빈이 다 필요한 경우, 특히 동적으로 동일 타입의 스프링 빈이 선택되는 경우에는 어떻게 해결할 수 있을지 작성하였습니다. 이 경우에는 자바의 Collection 클래스를 이용하여 동일 타입의 모든 빈들을 저장할 수 있습니다. 코드를 통해 확인해 보겠습니다. // Product 인터페이스 public interface Product { int discount(); } // Product 상속(구현)하는 Computer 클래스 @Component public class Computer implements Product{ @Override public int discount() {.. @Autowired와 @Qualifier, @Primary 아래 포스팅에서 @Autowired의 사용법에 대해서 살펴보았습니다. @Autowired로 의존관계 주입하기 앞 포스팅(@ComponentScan으로 스프링 빈 스캔하기)에서 @Component와 @ComponentScan을 이용하여 스프링 빈을 스프링 컨테이너에 등록하였습니다. 이제는 @Autowired를 이용하여 의존관계를 자동으로 주입할 silver-programmer.tistory.com 위 포스팅에서도 언급했듯이, @Autowired는 타입(Type)으로 빈을 조회합니다. 이때, 특정 타입의 빈 클래스 (위 포스팅에서는 Product 인터페이스)를 상속하는 자식들이 여러 개 있고, 그 자식들도 스프링 빈으로 등록되어 있을 때, 자식들은 부모 타입이므로 부모 타입으로 빈을 조회하면 빈이 2개 이상.. @Configuration + @Bean vs @Component 결론 외부 라이브러리를 사용해야 할 때는 우리가 직접 @Component를 그 라이브러리에 선언할 수 없으므로, @Configuration + @Bean 조합으로 스프링 빈을 생성하고, 그 외에 우리가 직접 제어할 수 있는 클래스들은 @Component를 붙임으로써 자동으로 스프링 빈으로 등록되도록 하자. 참고하면 좋은 글: [Spring] 빈 등록을 위한 어노테이션 @Bean, @Configuration, @Component 차이 및 비교 - (1/2) - MangKyu's Diary (tistory.com) [참고자료] https://stackoverflow.com/questions/67691575/when-should-you-use-configuration-instead-of-service-cont.. @Autowired required 옵션 주입할 스프링 빈이 없어도 애플리케이션이 동작해야 할 때가 있습니다. @Autowired는 required 옵션의 기본값이 true로 되어 있어서 자동 주입 대상이 없으면 오류가 발생합니다. 이번 포스팅은 자동 주입 대상을 옵션으로 처리하는 방법을 통해 오류가 발생하지 않도록 하는 방법에 대해서 작성하였습니다. 자동 주입 대상을 옵션으로 처리하는 방법은 아래와 같습니다. @Autowired(required=false): 자동 주입할 대상이 없으면 @Autowired가 선언된 메서드 자체가 호출되지 않습니다. org.springframwork.lang.@Nullable: 자동 주입할 대상이 없으면 null이 입력됩니다. Optional : 자동 주입할 대상이 없으면 Optional.empty가 입력됩니다... 다양한 의존관계 주입 방법 (@Autowired) 스프링 빈끼리의 의존관계 주입은 크게 4가지 방법이 있습니다. 생성자 주입 수정자 주입(Setter 주입) 필드 주입 일반 메서드 주입 이번 포스팅은 각각을 이용하여 의존관계를 주입하는 방법에 대해서 알아보겠습니다. 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입받는 방법입니다. 생성자 호출시점에 딱 한 번만 호출되는 것이 보장됩니다. 불변, 필수 의존관계에 사용됩니다. 아래 코드처럼 생성자 위에 @Autowired를 붙여서 의존관계를 주입하면 됩니다. @Component public class OnlineOrder implements Order { Product product; @Autowired public OnlineOrder(Product product) { this.product = .. @Autowired로 의존관계 주입하기 앞 포스팅(@ComponentScan으로 스프링 빈 스캔하기)에서 @Component와 @ComponentScan을 이용하여 스프링 빈을 스프링 컨테이너에 등록하였습니다. 이제는 @Autowired를 이용하여 의존관계를 자동으로 주입할 수 있도록 해보겠습니다. @Autowired로는 여러가지 방법으로 의존관계를 주입할 수 있는데, 우선은 가장 기본적이고 많이 사용하는 방법인 생성자를 통해 주입해보도록 하겠습니다. @Autowired 생성자 주입 1. 스프링 빈 생성하기 먼저 @Component를 이용해 원하는 스프링 빈을 생성하겠습니다. (물론 @ComponentScan도 적절한 위치에 정의가 되어 있어야겠습니다. ) @Component public class Book implements Product{.. @ComponentScan으로 스프링 빈 스캔하기 앞의 포스팅까지는 @Configuration과 @Bean을 이용하여 아래와 같이 자바 설정 정보에 등록할 스프링 빈을 직접 만들어 스프링 컨테이너에 빈을 등록하였습니다. @Configuration public class AutoAppConfig { @Bean Product getBook(){ return new Book(); } @Bean Order getOrder(){ return new OnlineOrder(getBook()); } } [Book, OnlineOrder 클래스] 더보기 public interface Order {} public class OnlineOrder implements Order { Product product; public OnlineOrder(Product product).. 빈(Bean)을 조회하는 다양한 방법 아래 포스팅에서 스프링 빈을 직접 조회하는 방법에 대해서 알아봤습니다. 아래 포스팅에서는 이름을 통해 빈을 찾았다면 이번 포스팅에서는 빈을 조회하는 다른 여러 가지 방법에 대해서 코드로 작성해 보았습니다. https://silver-programmer.tistory.com/entry/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88%EC%99%80-%EC%8A%A4%ED%94%84%EB%A7%81-%EB%B9%88Bean 스프링 컨테이너와 스프링 빈(Bean) 스프링 컨테이너란, 스프링 빈(Bean)을 저장하고 관리하는 저장소입니다. 스프링 빈(Bean)은 스프링 컨테이너에 의해 관리되는 재사용 가능한 소프트웨어 컴포넌트입니다. 즉, 스프.. 이전 1 2 3 4 5 6 다음