Spring
-
[김영한 스프링] 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 가 생성되면서 싱글톤이 깨지는 것 처럼 보인다. ..
-
[김영한 스프링] 13. 웹 애플리케이션과 싱글톤Spring/스프링 핵심 원리 - 기본편 2023. 4. 21. 01:28
웹 애플리케이션과 싱글톤 웹 애플리케이션은 보통 여러 고객이 동시에 요청한다. package hello.core.singletonTest; import hello.core.AppConfig; import hello.core.member.MemberService; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; public class SingletonTest { @Test @DisplayName("스프링 없는 순수한 DI 컨테이너") void pureContainer() { AppConfig appConfig = new AppConfig(); //..
-
[김영한 스프링] 12. BeanFactory와 ApplicationContext, 다양한 설정 형식 지원, 스프링 빈 설정 메타 정보Spring/스프링 핵심 원리 - 기본편 2023. 4. 16. 23:31
1. BeanFactory와 ApplicationContext BeanFactory 스프링 컨테이너의 최상위 인터페이스다. 스프링 빈을 관리하고 조회하는 역할을 담당한다. getBean()을 제공한다. 지금까지 우리가 사용했던 대부분의 기능은 BeanFactory가 제공하는 기능이다. ApplicationContext BeanFactory 기능을 모두 상속받아서 제공한다. 빈을 관리하고 검색하는 기능을 BeanFactory가 제공해주는데, 그러면 둘의 차이가 뭘까? 애플리케이션을 개발할 때는 빈을 관리하고 조회하는 기능은 물론이고, 수많은 부가기능이 필요하다. 메시지 소스를 활용한 국제화 기능 예를 들어서 한국에서 들어오면 한국어로, 영어권에서 들어오면 영어로 출력 환경변수 로컬, 개발, 운영 등을 구분..