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

[빈 스코프] 웹 스코프에 ObjectProvider 사용 시 발생하는 문제, CGLIB 가짜 프록시로 해결하기

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard ↓ ↓ 이어지는 강의 ↓ ↓ 2024.01.03 - [Spring/스프링 핵심 원리 - 기본편] - [빈 스코프] 웹 스코프 request 예제 만들기 [빈 스코프] 웹 스코프 request 예제 만들기 🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 웹 ..

[빈 스코프] 싱글톤 & 프로토타입 빈 함께 사용하기 : Provider

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard ✨ 문제 상황 스프링 컨테이너에 프로토타입 스코프 빈 요청 시, 항상 새로운 객체 인스턴스 생성 후 반환 싱글톤 빈과 함께 사용 시 문제 발생 가능 case1) (정상 동작) 프로토타입 스코프 빈만 직접 요청할 경우 🅰️ 클라이언트 A 가 스프링 컨테이너에 프로토타입 빈 요청 시 새로운 객체 생성 (x01) → addCount() 메서드 호출 시 count 값 1 증가 → x01 의 count 값 : 1 🅱️ 클라이언트 B 가 스프링 컨테이너에 프로토타입 ..

[빈 스코프] 웹 스코프 request 예제 만들기

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 웹 스코프는 웹 환경에서만 동작하기 때문에, 라이브러리를 추가해야 한다 💡웹 환경 구성하기 1. build.gradle 라이브러리 추가 & gradle refresh ... dependencies { implementation 'jakarta.inject:jakarta.inject-api:2.0.1' // JSR-330 Provider ... } ... 2. 애플리케이션 실행 후 브라우저 접속 (localhost:8080) 참고 - 웹 라이브러리 없을 시,..

[빈 스코프] 싱글톤 스코프 빈 & 프로토타입 스코프 빈 조회하기

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 💡싱글톤 스코프 빈 조회하기 ☑️ 스프링 컨테이너 생성 시점에 빈 초기화 메서드 실행 ☑️ 같은 인스턴스 빈 조회 ☑️ 종료 메서드 정상 호출 · test/java/hello.core/scope/SingletonTest public class SingletonTest { @Test void singletonBeanFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationC..

[빈 스코프] 스코프 종류(싱글톤, 프로토타입, 웹) & 지정 방법

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 스프링 빈은 스프링 컨테이너의 시작부터 종료까지 유지된다 ∵ 스프링 빈 → 싱글톤 스코프 (기본) 스코프 : 빈이 존재할 수 있는 범위 💡스프링이 지원하는 스코프 1. 싱글톤 ✅ 기본 스코프 ✅ 스프링의 시작부터 종료까지 유지되는 가장 넓은 범위의 스코프 ✅ 빈 조회 시, 항상 같은 인스턴스의 스프링 빈 반환 · 싱글톤 빈 요청 시, 동작 방식 2. 프로토타입 ✅ 프로토타입 빈의 생성과 의존 관계 주입까지 스프링 컨테이너가 관여하는 매우 짧은 범위의 스코프..

[빈 생명주기 콜백] 스프링 빈 생명주기 콜백 지원하는 방법 3가지 - 인터페이스, 설정 정보, 애노테이션

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 애플리케이션 시작 시점에 필요한 연결을 생성하고, 종료 시점에 연결을 모두 종료하는 작업 진행 시, 객체의 초기화와 종료 작업이 필요하다 (ex. 데이터버이스 커넥션 풀, 네트워크 소켓) 인터페이스 : IntializingBean, DisposableBean 설정 정보 : 빈 등록 초기화, 소멸 메서드 (☆이 방법 사용하기!!) 애노테이션 : @PostConstruct, @PreDestroy 🚨문제 상황🚨 · 상황 가정 ☑️ 가상의 외부 네트워크에 연결하는..

[의존 관계 자동 주입] 해당 타입의 스프링 빈 모두 조회 - List & Map

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 클라이언트가 할인의 종류 (rate, fix) 를 선택하는 경우 TEST ✅ Map : 모든 DiscountPolicy 주입 (스프링 빈 이름 : DiscountPolicy 타입으로 조회된 스프링 빈) ✅ List : 해당 DiscountPolicy 타입의 모든 스프링 빈 조회 1. Map & List 로 스프링 빈 조회하는 로직 개발 · test/java/hello.core/autowired/AllBeanTest public class AllBeanTes..

[의존 관계 자동 주입] @Qualifer 타입 체크 문제 해결하기 - 애노테이션 직접 생성

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 🚨문제 상황🚨 ☑️ @Qualifier 사용 시 컴파일 과정에서 타입 체크 안됨 💡해결 방법💡 ✅ 애노테이션 직접 생성 후 주입하기 1. Annotation 생성 · main/java/hello.core/annotation/MainDiscountPolicy @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_T..

[의존 관계 자동 주입] 조회할 빈이 2개 이상일 때

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard @Autowired : 필드명 매칭하기 @Qualifier : 추가 구분자 생성하기 @Primary : 우선 순위 정하기 🚨문제 상황🚨 🐶 @Autowired : 타입(Type)으로 조회 시 대상 빈이 2개 이상일 때 문제 발생 TEST ☑️ RateDiscountPolicy & FixDiscountPolicy 모두 @Component 적용하기 · 기존 코드 : RateDiscountPolicy 에만 적용되어 있는 @Component ... @Compone..

[의존 관계 자동 주입] Lombok 적용하는 방법

🧐강의🧐 https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%95%B5%EC%8B%AC-%EC%9B%90%EB%A6%AC-%EA%B8%B0%EB%B3%B8%ED%8E%B8/dashboard 💡IntelliJ 설정 변경하기 · build.gradle 에 Lombok 추가 & gradle refresh ... configurations { compileOnly { extendsFrom annotationProcessor } } dependencies { ... compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testCompileOnly 'or..

728x90