전체 글
-
[김영한 스프링] 21. 의존관계 자동 주입 - 자동, 수동의 올바른 실무 운영 기준Spring/스프링 핵심 원리 - 기본편 2023. 5. 13. 00:09
어떤 경우에 컴포넌트 스캔과 자동 주입을 사용하고, 어떤 경우에 설정 정보를 통해서 수동으로 빈을 등록하고, 의존관계도 수동으로 주입해야 할까? 시간이 갈수록 점점 자동을 선호하는 추세다. 스프링은 @Component 뿐만 아니라 @Controller, @Service, @Repository처럼 계층에 맞추어 일반적인 애플리케이션 로직을 자동으로 스캔할 수 있도록 지원한다. 거기에 더해서 최근 스프링 부트는 컴포넌트 스캔을 기본으로 사용하고, 스프링 부트의 다양한 스프링 빈들도 조건이 맞으면 자동으로 등록하도록 설계했다. 스프링 빈을 하나 등록할 때 @Component만 넣어주면 끝나는 일을 @Configuration 설정 정보에 가서 @Bean을 적고, 객체를 생성하고, 주입할 대상을 일일이 적어주는 ..
-
[김영한 스프링] 20. 의존관계 자동 주입 - 애노테이션 직접 만들기, 조회한 빈이 모두 필요할 때, List, MapSpring/스프링 핵심 원리 - 기본편 2023. 5. 12. 22:34
1. 애노테이션 직접 만들기 @Qualifier("mainDiscountPolicy") 이렇게 문자를 적으면 컴파일 시 타입 체크가 안된다. 다음과 같은 애노테이션을 만들어서 문제를 해결할 수 있다. main/java/hello.core/annotation/MainDiscountPolicy 생성 package hello.core.annotation; import org.springframework.beans.factory.annotation.Qualifier; import java.lang.annotation.*; @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTA..
-
[김영한 스프링] 19. 의존관계 자동 주입 - 롬북과 최신 트랜드, 조회 빈이 2개 이상 문제Spring/스프링 핵심 원리 - 기본편 2023. 5. 11. 23:25
1. 롬복과 최신 트랜드 막상 개발을 해보면, 대부분이 다 불변이고, 그래서 필드에 final 키워드를 사용하게 된다. 그런데 생성자도 만들어야 하고, 주입받은 값을 대입하는 코드도 만들어야 하고… 필드 주입처럼 좀 편리하게 사용하는 방법은 없을까? 역시 개발자는 귀찮은 것은 못 참는다! // lombok 설정 추가 시작 configurations { compileOnly { extendsFrom annotationProcessor } } // lombok 설정 추가 끝 // lombok 라이브러리 추가 시작 compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testCompileOnly 'org.pro..
-
[김영한 스프링] 18. 의존관계 자동 주입 - 옵션 처리, 생성자 주입Spring/스프링 핵심 원리 - 기본편 2023. 5. 9. 00:50
1. 테스트 패키지 에러 수정 1. 에러 내용 상 Null이 나오는 문제 2. ConfigurationSingletonTest에서 getBean에서 발생 3. AppConfig에서 return null이 문제라서 삭제 후 주석 해제 충돌 테스트 할 당시의 코드 주석처리 모두 완료 2. 옵션 처리 주입할 스프링 빈이 없어도 동작해야 할 때가 있다. 그런데 @Autowired만 사용하면 required 옵션의 기본값이 true로 되어 있어서 자동 주입 대상이 없으면 오류가 발생한다. 자동 주입 대상을 옵션으로 처리하는 방법은 다음과 같다. @Autowired(required=false) : 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨 org.springframework.lang.@Nullabl..
-
[김영한 스프링] 17. 의존관계 자동 주입 - 다양한 의존관계 주입 방법Spring/스프링 핵심 원리 - 기본편 2023. 5. 3. 23:26
의존관계 주입은 크게 4가지 방법이 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 1. 생성자 주입 이름 그대로 생성자를 통해서 의존 관계를 주입받는 방법이다. 지금까지 우리가 진행했던 방법이 바로 생성자 주입이다. 특징 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용 불변 : 생성자에 값을 넣고 수정자 메서드(setter 메서드)를 만들지 않으면 된다. (값을 세팅한 후 더 이상 바뀌지 않아야 한다.) 필수 : 문서에 NULL을 허용 한다고 되어 있지 않는 이상 생서자에 값을 넣어줘야 한다. 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입 된다. 물론 스프링 빈에만 해당한다. 2. 수정자 주입(setter 주입) s..
-
[김영한 스프링] 16. 필터, 중복 등록과 충돌Spring/스프링 핵심 원리 - 기본편 2023. 4. 26. 23:51
필터 package hello.core.filter; import java.lang.annotation.*; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyIncludeComponent { } test/java/hello.core/filter/MyIncludeComponent 생성 package hello.core.filter; import java.lang.annotation.*; @Target(ElementType.TYPE) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface MyExcludeComponent { }..
-
[김영한 스프링] 15. 컴포넌트 스캔Spring/스프링 핵심 원리 - 기본편 2023. 4. 25. 23:25
컴포넌트 스캔과 의존관계 자동 주입 시작하기 main/java/hello.core/AutoAppConfig 생성 AppConfig는 수동 등록, AutoAppConfig는 자동 등록 @ComponentScan - @Component가 붙은 클래스를 찾아서 자동으로 스프링 빈으로 등록 excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) - AutoAppConfig를 사용하기 때문에 AppConfig는 무시하도록 필터 - AppConfig에도 @Component가 있기 때문에 자동으로 스프링 빈에 등록되어 진다. 그래서 필터를 사용하여 무시 MemoryMemberRepository,..
-
[김영한 스프링] 14. @Configuration과 싱글톤, 바이트코드 조작의 마법Spring/스프링 핵심 원리 - 기본편 2023. 4. 24. 21:45
@Configuration과 싱글톤 @Bean memberService -> new MemoryMemberRepository() @Bean orderService -> new MemoryMemberRepository() memberService 빈을 만드는 코드를 보면 memberRepository() 를 호출한다. 이 메서드를 호출하면 new MemoryMemberRepository() 를 호출한다. orderService 빈을 만드는 코드도 동일하게 memberRepository() 를 호출한다. 이 메서드를 호출하면 new MemoryMemberRepository() 를 호출한다. 결과적으로 각각 다른 2개의 MemoryMemberRepository 가 생성되면서 싱글톤이 깨지는 것 처럼 보인다. ..