스프링/스프링 기본이론
-
웹 스코프와 프록시스프링/스프링 기본이론 2023. 2. 2. 14:58
웹 스코프 종류 request : HTTP 요청 하나가 들어오고 나갈 때 까지 유지되는 스코프로 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고 관리된다. session : HTTP Session과 동일한 생명주기를 가지는 스코프 application : 서블릿 컨텍스트와 동일한 생명주기 가지는 스코프 websocket : 웹 소켓과 동일한 생명주기를 가지는 스코프 웹 스코프중에 제일 많이 쓰이는 request에 대해서 알아볼 것이다. 나머지는 비슷하기도 하고, request가 가장 많이 쓰이는 것이기 때문이다. 스코프의 로그를 관찰하기 위해 MyLogger를 만들어준다. @Component @Scope(value = "request", proxyMode = ScopedProxyMode.TARGE..
-
프로토타입 스코프스프링/스프링 기본이론 2023. 2. 1. 23:05
빈 스코프는 빈이 생성되고부터 소멸할 때까지의 단계이다. 프로토타입 스코프는 빈을 생성한 다음에 스프링에서 관리해주는 것이 아니고, 사용자 요청이 있을 때마다 새로운 객체를 생성해서 사용자에게 넘겨주고 끝낸다. 즉, 생성되고 이후는 사용자에게 빈의 권한이 있고, 그렇기 때문에 @PreDstroy도 호출되지 않는다. 싱글톤의 경우 public class SingletonTest { @Test void singletonBeanFind() { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(SingletonBean.class); SingletonBean singletonBean1 = ac.getBean(Singleto..
-
어노테이션을 직접 만들기스프링/스프링 기본이론 2023. 2. 1. 22:39
@Component @Qualifier("mmainDiscountPolicy") // 오류 public class RateDiscountPolicy implements DiscountPolicy { // 생략 } 위와 같이 문자열을 잘못 입력하게 된다면 컴파일 에러로 잡기도 힘들고 오류를 발견하기 어려울 가능성이 있다. 애노테이션을 직접 만들면 이러한 실수를 방지할 수 있다. @Target({ElementType.FIELD, ElementType.METHOD, ElementType.PARAMETER, ElementType.TYPE, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Inherited @Documented @Qualifi..
-
빈 생명주기 콜백스프링/스프링 기본이론 2023. 2. 1. 22:28
스프링 빈의 라이프 사이클 (생성자 주입 등 몇 개는 제외) 객체 생성 -> 의존관계 주입 스프링 빈은 객체를 생성하고 의존관계 주입이 다 끝나고나서 필요한 데이터를 사용할 준비가 된다. 개발자는 자동 의존관계 주입을 했을 때 의존관계 주입이 끝나는 시점을 모르기때문에 스프링은 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 기능을 제공한다. 또한, 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다. 스프링 빈의 이벤트 라이플사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 초기화 콜백 : 빈이 생성되고 빈의 의존관계 주입이 완료된 후 호출 소멸전 콜백 : 빈이 소멸되기 직전..
-
빈이 2개 이상일 경우에 의존관계 주입스프링/스프링 기본이론 2023. 2. 1. 22:03
@Component public class FixDiscountPolicy implements DiscountPolicy{ .... } @Component public class RateDiscountPolicy implements DiscountPolicy{ .... } 위와 같이 DiscountPolicy라는 빈이 2개 이상 존재할 경우에 어떻게 해결하면 좋을지에 대한 3가지 해결책이 존재한다. 1. Autowired에 필드명 매칭 @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.di..
-
의존관계 자동 주입스프링/스프링 기본이론 2023. 1. 31. 14:22
1. 생성자 주입 @Component public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository; @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepository = memberRepository; } // 생성자 주입 -> 추상화에만 의존 } 생성자를 통해서 스프링 컨테이너의 빈들의 의존관계를 주입하는 방법이다. 의존관계를 자동 주입하기를 원할 때 @RequiredArgsConstructor를 사용했다. 어노테이션 하나로 스프링 빈을 주입받을 수 있는 이유는 생성자 주입..
-
컴포넌트 스캔스프링/스프링 기본이론 2023. 1. 30. 22:58
컴포넌트 스캔이란 빈을 따로 등록하지 않아도 @Component라는 어노테이션이 붙은 객체들을 스프링 컨테이너가 관리해주는 기능이다. @Configuration @ComponentScan( excludeFilters = @ComponentScan.Filter(type = FilterType.ANNOTATION, classes = Configuration.class) ) public class AutoAppConfig { } classes = Configuration.class는 AppConfig를 빼주는 용도이다. 보통 설정 정보를 컴포넌트 스캔 대상에서 제외하지 않지만 기존 예제 코드를 유지하기 위해서 이 클래스에서 제외하는 것을 했다. 코드를 보면 알겠지만 @Bean으로 따로 빈을 등록해주지 않았다...
-
@Configuration과 싱글톤 패턴스프링/스프링 기본이론 2023. 1. 30. 18:52
@Configuration // Configuration이라고 선언 public class AppConfig { @Bean // 스프링 컨테이너에 등록 public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public MemoryMemberRepository memberRepository() { return new MemoryMemberRepository(); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public D..