본문 바로가기

분류 전체보기

(114)
[Spring] Option 처리 옵션처리 주입할 스프링 빈이 ㅇ벗어도 동작해야 할 때가 있다. 그런데 @Autowired 만 사용하면 required 옵션의 기본값이 true 로 되어있어 자동 주입 대상이 없으면 오류가 발생한다 자동주입대상 옵션처리 방법 Autowired(required=false)' : 자동 주입할 대상이 없으면 수정자(setter) 메서드 자체가 호출 안됨 org.springframework.lag.@Nullable : 자동 주입할 대상이 없으면 null이 입력된다. Optional : 자동 주입할 대상이 없으면 Optional.empty 가 입력 된다. package hello.core.autowired; import hello.core.member.Member; import org.junit.jupite..
[Spring] 의존관계 주입 방법 의존관계 자동 주입 다양한 의존관계 주입 방법 생성자 주입 수정자 주입(setter) 필드 주입 일반 메서드 주입 생성자 주입 생성자를 통해서 의존 관계를 주입 받는 방법이다. 지금까지 우리가 진행했던 방법이다. 생성자 호출 시점에서 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용한다. package hello.core.order; ​ ​ import hello.core.discount.DiscountPolicy; import hello.core.member.Member; import hello.core.member.MemberRepository; import org.springframework.beans.factory.annotation.Autowired; import org.sprin..
[Spring] Component Component @ComponentScan : @Component가 붙은 클래스를 전부 찾아서 스프링 빈으로 등록 해주는 역할을 한다. 주의 컴포넌트 스캔을 사용하면 @Configuration 이 붙은 설정 정보도 자동으로 등록되기 때문에 excludeFilters 를 이용해서 설정 정보는 컴포넌트 스캔 대상에서 제외했다. 보통 설정 정보를 컴포넌트 스캔 대상에서 제외하지는 않지만 기존 코드를 최대한 남기기 위해 선택했다. @Configuration 이 컴포넌트 스캔의 대상이 된 이유는 @Component 가 Configuration 코드에 붙어있기 때문이다. package hello.core.order; import org.springframework.context.annotation.Componen..
[Java] Lambda function 예제 /* * 메서드 vs 함수 * 메서드 :클래스 내에 있는 함수 * 함수 : 클래스 필요없이 단독 실행 가능한 메서드 */ @FunctionalInterface interface Lambda{ int sum(int a, int b); //(d, b) } /* * * (매개변수) ->실행 * public class Test{ * */ class Test{ public int testFunc(Lambda lambda) { //lambda.sum(3, 5); System.out.println("-============== "); return lambda.sum(3, 5); } } public class LambdaTestCode { /* * 람다식문 * (매개변수 목록) -> {실행문} * 함수형 람다 를 사용..
[Spring] Configuration N SingleTon @Configuration N Singleton AppConfig.class Code package hello.core; ​ import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import hello.core.member.MemberService; import hello.core.member.MemeberServiceImpl; import hello.core.member.MemoryMemberRepository; import hello.core.order.OrderService; import hello.core.or..
[Spring] SingleTon 단점 싱글톤 방식의 주의점 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상채를 유지하게 설계하면 안된다. 무상태(stateless)로 설계해야 한다. 특정 클라이언트에 의존적인 필드가 있으면 안된다. 특정 클라이언트가 값을 변경할 수 있는 필드가 있으면 안된다. 가급적 읽기만 가능해야한다. 필드 대신에 자바에서 공유되지 않은 지역변수, 파라미터, threadLocal등을 사용해야 한다. 스프링 빈의 필드에 공유 값을 설정하면 정말 큰 장애가 발생할 수 있다. package hello.core.singleton; import org.junit.jupiter.api.Assertions; import org.junit.jupite..
[Spring] SingleTon Web Application N SingleTon : 대부분 스프링 애플리케이션은 웹 애플리케이션이다. package hello.core.singleton; 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 Container") void pureContainer(){ AppConfig ap = new AppConfi..
[Spring] create Spring Container 스프링 컨테이너 생성 //스프링 컨테이너 생성 ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext 를 스프링 컨테이너라고 하며 인터페이스이다. 스프링컨테이너는 xml기반으로 만들 수 있고 @기반의 자바 설정 클래스로 만들 수 있다. 스프링 컨테이너를 부를때 BeanFactory, ApplicationContext 로 구분해서 설명한다 참고 : https://www.baeldung.com/spring-beanfactory-vs-applicationcontext Bean 객체 빈 이름은 메서드 이름을 사용한다 빈 이름을 직접 부여할 수 있다. //bean name은 uniq..