본문 바로가기

분류 전체보기166

[스프링 기본] 8. 빈 생명주기 콜백 빈 생명주기 콜백 시작 초기화 작업은 의존관계 주입 후에 일어나야 한다.(주입되기 전이라면 null일테니까..) 종료 작업 또한 할 일을 다 마친 후에 안전하게 진행되어야 한다. 스프링은 생명주기 콜백을 지원해 개발자가 적절한 시점에 초기화, 종료 작업을 할 수 있도록 한다. 스프링 Bean의 이벤트 라이프사이클 스프링 컨테이너 생성 → 스프링 빈 생성 → 의존관계 주입 → 초기화 콜백 → 사용 → 소멸전 콜백 → 스프링 종료 스프링은 크게 3가지 방법으로 빈 생명주기 콜백을 지워한다. 인터페이스(InitalizingBean, DisposableBean) 설정 정보에 초기화 메서드, 종료 메서드 지정 @PostConstruct, @PreDestory 어노테이션 지원 (권장되는 방법) 인터페이스 Inita.. 2022. 10. 14.
[스프링 기본] 7. 의존관계 자동 주입 다양한 의존관계 주입 방법 생성자 주입 수정자 주입 필드 주입 일반 메서드 주입 생성자 주입 @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } 지금까지 해왔던 방식 스프링 빈의 경우, 생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입 된다. 생성자 호출시점에 딱 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용. (=현재 memberRepository,discountPolicy를 set해주는 함수는 .. 2022. 10. 14.
[스프링 기본] 6. 컴포넌트 스캔 컴포넌트 스캔과 의존관계 자동 주입 시작하기 지금까지는 @Bean을 사용해서 스프링 빈을 일일히 등록했다. 하지만 등록해야할 스프링 빈이 많아지면 귀찮고 누락 문제도 많이 발생한다. 그래서 스프링은 설정 정보가 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 또 의존관계를 자동 주입하는 @Autowired도 제공한다. AutoAppConfig라는 클래스를 만들자. @Configuration @ComponentScan( excludeFilters = @Filter(type = FilterType.ANNOTATION, classes = Configuration.class)) public class AutoAppConfig { } @Configuration에 더해 @Component.. 2022. 10. 12.
[스프링 기본] 5. 싱글톤 컨테이너 웹 어플리케이션과 싱글톤 대부분의 스프링 애플리케이션은 웹 애플리케이션이다. 그리고 웹 애플리케이션은 여러 고객이 동시에 요청을 한다. 요청할때마다 객체를 만들면 낭비가 심하다. 그러므로 싱글톤 패턴으로 설계하는게 효율적이다. 싱글톤 패턴 private static final SingletonService instance = new SingletonService(); public static SingletonService getInstance() { return instance; } 자바에서 배운것과 같이, private static으로 생성하고 getInstance를 통해서만 조회할 수 있도록 하면 된다. 이러면 단 하나의 인스턴스를 여럿이 돌려쓰게 된다. 하지만 이런 싱글톤 패턴은 문제점이 많다. 코.. 2022. 10. 12.
[스프링 기본] 4. 스프링 컨테이너와 스프링 빈 스프링 컨테이너 생성 ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); ApplicationContext가 스프링 컨테이너이다. ApplicationContext는 인터페이스고, AnnotationConfigApplicationContext가 그 구현체이다. 스프링 컨테이너 만드는 방법 어노테이션 기반 xml 기반(요즘은 잘 사용안함) 우리 예제에서는 AppConfig에 어노테이션을 붙여서 만들었다. 스프링 컨테이너를 생성할 때는 구성 정보를 지정해주야 한다. 여기서는 AppConfig.class 를 구성 정보로 지정했다. 스프링 빈은 빈 저장소에 @Bean이 붙은 애들을 등록한다... 2022. 10. 10.
[스프링 기본] 3. 스프링 핵심 원리 이해2 -객체 지향 원리 작용 새로운 할인 정책 개발 기획자가 말을 바꿔서 VIP 회원 기존 1000원 할인 대신 10% 할인으로 바뀐 상황. DiscountPolicy를 구현한 RateDiscountPolicy를 만든다. 기존 FixDiscountPolicy랑 똑같은데 VIP인 경우 return price * discountPercent / 100; 으로 바뀐다. RateDiscountPolicy discountPolicy = new RateDiscountPolicy(); @Test @DisplayName("VIP는 10% 할인이 적용되어야 한다.") void vip_o() { //given Member member = new Member(1L, "memberVIP", Grade.VIP); //when int discount = d.. 2022. 10. 10.
반응형