본문 바로가기
728x90
반응형

스프링 Spring/스프링 핵심 원리 - 기본편61

[의존관계 자동 주입] 조회 빈이 2개 이상 - 문제 [의존관계 자동 주입] 조회 빈이 2개 이상 - 문제 @Autowire는 타입(Type)으로 조회한다. ac.getBean(DiscountPolicy.class) 코드와 유사하게 동작한다.(실제로는 더 많은 기능을 제공한다.) 타입으로 조회하면 선택된 빈이 2개 이상일 때 문제가 발생한다. 인프런 강의 "스프링 핵심 원리 - 기본편"을 정리한 것 입니다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원리를 이해하고, 스프링 기본기를 확실히 다질 수 있습니다., - 강의 소개 | 인프런... www.inflearn.com 2022. 2. 17.
[의존관계 자동 주입] 롬복과 최신 트렌드 롬복과 최신 트렌드 롬복 사용 전 설정 /* build.gradle */ plugins { id 'org.springframework.boot' version '2.6.3' id 'io.spring.dependency-management' version '1.0.11.RELEASE' id 'java' } group = 'hello' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' //lombok 설정 추가 시작 configurations { compileOnly { extendsFrom annotationProcessor } } //lombok 설정 추가 끝 repositories { mavenCentral() } dependencies { implemen.. 2022. 2. 16.
[의존관계 자동 주입] 생성자 주입을 선택해라! 생성자 주입을 선택해라! 불변 대부분의 의존관계 주입은 한번 일어나면 애플리케이션 종료시점까지 의존관계를 변경할 일이 없다. 오히려 대부분의 의존관계는 애플리케이션 종료 전까지 변하면 안된다.(불변해야 한다.) 수정자 주입 사용시, set 메서드를 public으로 열어두어야 해서 누군가 실수로 변경 가능성이 있다. 생성자 주입은 객체를 생성할 때 딱 1번만 호출되므로 이후에 호출되는 일이 없다. 따라서 불변하게 설계할 수 있다. final 키워드 final을 넣게 되면 생성자에 혹시라도 값이 설정되지 않는 오류를 컴파일 시점에 막아 준다. 항상 생성자 주입을 선택해라! 그리고 가끔 옵션이 필요하면 수정자 주입을 선택해라. 필드 주입은 사용하지 않는게 좋다. 인프런 강의 "스프링 핵심 원리 - 기본편"을 .. 2022. 2. 15.
[의존관계 자동 주입] 옵션 처리 옵션 처리 주입할 스프링 빈이 없어도 동작해야 할 때가 있다. @Autowired만 사용하면 required 옵션 기본값이 true이기 때문에 자동 주입 대상이 되어 오류 발생 자동 주입 대상을 옵션으로 처리하는 방법 1. @Autowired(required = false) : 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨 2. org.springframework.lang.@Nullable : 자동 주입할 대상이 없으면 null 입력 3. Optional : 자동 주입할 대상이 없으면 Optional.empty 입력 > 참고: @Nullable, Optional은 스프링 전반에 걸쳐서 지원된다. 예를 들어서 생성자 자동 주입에서 특정 필드에만 사용해도 된다. 인프런 강의 "스프링 핵심 원리 .. 2022. 2. 14.
[의존관계 자동 주입] 다양한 의존관계 주입 방법 다양한 의존관계 주입 방법 1. 생성자 주입 생성자 호출시점에 딱 1번만 호출되는 것이 보장 불변, 필수 의존관계에 사용 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입 된다. 물론 스프링 빈에만 해당한다. 2. 수정자 주입(setter 주입) 선택, 변경 가능성이 있는 의존관계에 사용 자바빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법 3. 필드 주입 코드가 간결 DI 프레임워크가 없으면 아무것도 할 수 없다. 사용하는 곳 애플리케이션의 실제 코드와 관계없는 테스트 코드 스프링 설정을 목적으로 하는 @Configuration 같은 곳에서만 특별한 용도로 사용 4. 일반 메서드 주입 한번에 여러 필드를 주입 받을 수 있다. 일반적으로 잘 사용하지 않는다. 인프런 강의 "스프링 .. 2022. 2. 13.
[컴포넌트 스캔] 중복 등록과 충돌 중복 등록과 충돌 자동 빈 등록 vs 자동 빈 등록 ConflictingBeanDefinitionException 예외 발생 수동 빈 등록 vs 자동 빈 등록 수동 빈 등록이 우선권을 가진다. 개발자가 의도적으로 수동 빈 등록을 한 것이라면 좋겠지만 현실은 개발자의 의도가 아닌 경우가 대부분이다. 정말 잡기 어려운 버그가 만들어지고 항상 잡기 어려운 버그는 애매한 버그다. 그래서 최근 스프링 부트에서는 수동 빈 등록과 자동 빈 등록이 충돌나게 되면 오류가 발생하도록 기본값을 바꾸었다. application.properties에 spring.main.allow-bean-definition-overriding=true 를 추가하면 수동 빈 등록으로 실행된다. 인프런 강의 "스프링 핵심 원리 - 기본편"을 정.. 2022. 2. 12.
[컴포넌트 스캔] 필터 필터 includeFilters : 컴포넌트 스캔 대상을 추가로 지정 excludeFilters : 컴포넌트 스캔에서 제외할 대상을 지정 FilterType 옵션 1. ANNOTATION: 기본값, 애노테이션을 인식해서 동작 ex) org.example.SomeAnnotation 2. ASSIGNABLE_TYPE: 지정한 타입과 자식 타입을 인식해서 동작 ex) org.example.SomeClass 3. ASPECTJ: AspectJ 패턴 사용 ex) org.example..*Service+ 4. REGEX: 정규 표현식 ex) org\.example\.Default.* 5. CUSTOM: TypeFilter 이라는 인터페이스를 구현해서 처리 ex) org.example.MyTypeFilter 참고: .. 2022. 2. 11.
[컴포넌트 스캔] 탐색 위치와 기본 스캔 대상 탐색 위치와 기본 스캔 대상 basePackages : 탐색할 패키지의 시작 위치 지정하여 이 패키지를 포함하여 하위 패키지 모두 탐색 basePackageClasses : 지정한 클래스의 패키지를 탐색 시작 위치로 지정 지정하지 않으면 @ComponentScan이 붙은 설정 정보 클래스의 패키지의 시작 위치가 된다. 권장 방법 패키지 위치를 지정하지 않고, 설정 정보 클래스의 위치를 프로젝트 최상단에 둔다. 참고 : 애노테이션에는 상속관계라는 것이 없어서 특정 애노테이션을 들고 있는 것을 인식할 수 있는 것은 스프링이 지원하는 기능이다. 인프런 강의 "스프링 핵심 원리 - 기본편"을 정리한 것 입니다. 스프링 핵심 원리 - 기본편 - 인프런 | 강의 스프링 입문자가 예제를 만들어가면서 스프링의 핵심 원.. 2022. 2. 10.
728x90
반응형