반응형 Backend22 Spring / ComponentScan의 탐색 위치와 기본 스캔 대상 ComponentScan의 탐색 위치와 기본 스캔 대상 @ComponentScan(basePackages = {"hello.test1", "hello.test2"}) 지정하는 패키지의 하위 패키지만을 스캔한다. 지정 하지 않으면 현재 위치 패키지의 하위 패키지를 다 스캔하기 때문에 필요하다면 지정한다. 즉, @ComponentScan이 붙은 설정 정보 클래스의 패키지가 스캔의 시작 위치가 됨. 위 예시는 hello/text1 패키지와 test2 패키지의 하위 패키지만을 스캔 권장 방법은 애초에 구성 설정 클래스는 프로젝트를 대표하는 정보이므로, 프로젝트 시작 root에 위치 시켜 놓고, bassPackages 지정은 생략하는 것이 최근 관례 @SpringBootApplication SpringBoot 프.. 2023. 10. 17. Spring / 컴포넌트 스캔에서 빈을 중복으로 등록하는 상황과 충돌 컴포넌트 스캔에서 빈을 중복으로 등록하는 상황과 충돌 자동 빈 등록 (ComponentScan) 수동 빈 등록 (@Bean) 컴포넌트 스캔에 의해 자동으로 중복된 이름의 스프링 빈이 등록되면? ConflictingBeanDefinitionException 예외가 발생 수동 빈 등록과 자동 빈 등록이 충돌 되었다면? 예외가 발생하지 않는다. 이 경우, 수동 빈 등록이 우선권을 가진다. 수동 빈이 자동 빈을 오버라이딩 해버림. 테스트 코드를 보면 오버라이딩 했고 replace됐다는 것을 확인 할 수 있음. 그러나 이 것은 큰 버그를 야기할 수 있다. 따라서 최근의 스프링 부트는 수동 빈 등록과 자동 빈의 충돌 발생 시 오류가 발생하도록 기본 값을 바꿈. @SpringBootApplication 클래스를 실행.. 2023. 10. 17. Spring / 컴포넌트 스캔과 의존관계 자동 주입 (ComponentScan) 컴포넌트 스캔과 의존관계 자동 주입 등록해야 할 빈(@Bean)이 몇백 몇천개라면? 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔 기능을 제공 의존 관계도 자동 주입하는 @Autowired도 제공 @ComponentScan 자동으로 스프링 빈을 끌어올리는 에너테이션 즉 자동으로 스프링 빈을 등록해줌 이 에너테이션은 @Component 에너테이션이 붙은 클래스를 모두 스캔해서 스프링 빈으로 등록 @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) 스프링 빈을 자동 등록하는데 필터링 할 것을 지정 컴포넌트 스캔을 지정하면 @.. 2023. 10. 17. Spring / 의존성 주입(생성자 주입이 권장되는 이유) 생성자 주입을 선택해야 하는 이유 최근에 스프링을 포함한 DI 프레임워크 대부분이 생성자 주입을 권장한다. 불변성 대부분의 의존 관계 주입은 한번 일어나면 종료시점까지 의존관계를 변경할 일이 없음. 또한, 오히려 의존 관계는 애플리케이션 종료 전까지 불변해야 한다. (변경이 적어야함.) 수정자 주입은 setter를 public으로 열어 두어야 하기 때문에 외부에서 변경 가능성이 있음. 생성자 주입은 객체 생성 시 단 1번만 호출 되므로 불변하게 설계할 수 있음. 누락의 방지 생성자는 호출 시 필수적으로 값을 초기화해주어야 하므로, 누락을 방지할 수 있다. 또한 필드에 final을 붙여서 생성자에서만 초기화가 가능해지고 필드의 값이 final이므로, 불변성이 된다. 이 뿐만 아니라, 필드에 final이 붙.. 2023. 10. 17. Spring / @Autowired의 옵션처리 @Autowired의 옵션처리 @Autowired는 required default가 true이므로, 자동 주입 대상이 없으면 오류가 발생 자동 주입할 대상이 없으면 null이 됨. 처리 방법 @Autowired(required = false) required 는 필수 주입 여부를 결정하는 옵션. false로 하는 경우, 제외 대상이 될 수 있음 @Nullable 이것을 파라미터에 넣어주면 null로 처리를 해줌. Optional Optional.empty로 넣어줌 public class AutowiredTest { @Test @DisplayName("Autowired의 옵션 처리") void AutowiredOption() { ApplicationContext ac = new AnnotationConfi.. 2023. 10. 17. Spring / 의존관계 자동 주입 의존관계 자동 주입 스프링의 두 가지 라이프 사이클 빈 생성 단계 의존 관계 주입 단계 의존 관계의 여러가지 주입 방법 생성자 주입 수정자 주입(setter) 필드 주입 일반 메서드 주입 생성자 주입 ( 가장 많이 사용되는 주입 방식 ) @Autowired, 생성자에 이 에너테이션을 붙여서 생성자의 정보를 토대로 의존 관계를 주입 생성자 호출시점에 딱 1번만 호출되는 것이 보장됨. 즉, 코드만 잘 짜면 1번만 호출하여 의존 관계를 주입하고 더 이상 세팅 못하게 막는 것이 가능하다. 따라서, 불변, 필수 의존관계에 사용된다. 수정이 적은 불변성 코드를 작성하는 것이 개발에서 좋은 습관이다. 불변, 필수 의존 관계란?? final이 붙은 필드는 값이 무조건 초기화되어야 하며, 값이 할당 되면 "불변"이다. .. 2023. 10. 17. 이전 1 2 3 4 다음 반응형