목록BE (354)
오봉이와 함께하는 개발 블로그
옵션 처리 스프링 빈을 옵셔널 하게 해서 등록을 안 해도 기본 로직으로 동작하게 하거나, 기본이 없으면 실행하지 않게 하는 등 주입할 스프링 빈이 없어도 동작해야 할 때가 있는데, @Autowired의 required라는 옵션은 기본값이 true로 되어 있어 자동 주입 대상이 없으면 오류가 발생한다. 자동 주입 대상을 옵션으로 처리하는 방법 @Autowired(required = true) : 자동 주입할 대상이 없으면 수정자 메소드 자체가 호출 안됨 org.springframework.lang.@Nullable : 자동 주입할 대상이 없으면 Null이 입력 Optinal : 자동 주입할 대상이 없으면 Optional.empty가 입력된다. 테스트 코드 public class AutowiredTest {..
다양한 의존관계 주입 방법 의존관계 주입은 크게 4가지 방법이 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메소드 주입 생성자 주입 생성자를 통해 의존관계를 주입 받는 방법 지금까지 진행했던 방법이 생성자 주입이다. 구현체를 스프링 빈에 등록할 때 같이 이뤄진다. 컴포넌트 스캔을 하며 @Autowired가 있는 생성자를 찾고 스프링 빈에서 필요한 객체들을 찾아 주입한다. 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입 된다. 특징 생성자 호출시점에 딱 1번만 호출되는 것이 보장 불변, 필수 의존관계에 사용 @Component public class OrderServiceImpl implements OrderService { private final MemberR..
필터 includeFilters : 컴포넌트 스캔 대상을 추가로 지정 excludeFilters : 컴포넌트 스캔에서 제외할 대상 지정 테스트 어노테이션 생성 -> 컴포넌트 스캔 대상에 추가 package hello.core.scan.filter; import java.lang.annotation.*; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyIncludeComponent { } @MyIncludeComponent public class BeanA { } 어노테이션 생성 -> 컴포넌트 스캔 대상에 제외 package hello.core.scan.filter; import java..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bYXoso/btrEivuhiZV/FhLF2kMntzXYsZ6lNdr0MK/img.png)
컴포넌트 스캔과 의존관계 자동 주입 시작 지금까지 스프링 빈 등록할 때 자바 코드의 @Bean이나 XML의 등을 통해 직접 나열했다. 이렇게 등록할 스프링 빈이 기하급수적으로 많아지면 등록하기 귀찮으며 누락될 수 있다. 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공함 또 의존관계를 자동으로 주입하는 @Autowired라는 기능도 제공한다 AutoAppConfig.java package hello.core; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; import org.springframe..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/T6lRV/btrEjVZD6SY/uUr2wq9TlHRmTDiy35ycZ1/img.png)
@Configuration과 싱글톤 AppConfig를 보면 이상한 점이 있다. memberService 빈을 만드는 코드를 보면 memberRepository()를 호출 memberRepository()를 호출하면 new MemoryMemberRepository()를 호출한다. orderService 빈을 만드는 코드도 동일하게 memberRepository() 를 호출한다. memberRepository()를 호출하면 new MemoryMemberRepository() 를 호출한다. 각각 다른 두 개의 MemoryMemberRepository가 생성되며 싱글톤이 깨지는 것 처럼 보이는데 스프링 컨테이너는 이 문제를 어떻게 해결할까?? @Configuration public class AppConfig..