본문 바로가기

전체 글

(146)
Spring- 빈 스코프(싱글톤, 프로토타입) 싱글톤 스코프 디폴트 타입의 스코프로서 빈이 등록시 하나의 객체만 존재하며 클라이언트들은 하나의 빈을 공유하며 사용한다. 스프링 컨테이너 시작과 종료까지 유지되는 가장 넓은 범위의 스코프 프로토타입 스코프 스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다. 클라이언트가 스프링 컨테이너에 프로토타입 빈을 요청하면 요청시마다 새로운 프로토타입 빈을 생성하여 반환한다. 즉, 스프링은 의존관계 주입까지만 프로토타입 빈을 관리하고 그 후부터는 클라이언트가 빈의 관리 책임을 가진다. package hello.core.scope; import org.junit.jupiter.api.Test; import org.springframework.conte..
Spring- 빈 생명 주기 스프링 빈 생명 주기 스프링 빈은 객체 생성 후 의존관계 주입의 라이프 사이클을 갖는다. 그러므로 사용자는 의존관계 주입이 끝난 후에 빈을 사용할 수 있다. 초기화 작업은 의존 관계 주입이 끝난 시점부터 가능하다. 의존관계 주입이 완료되면 스프링 빈에게 콜백 메서드를 통해서 초기화 시점을 알려주는 다양한 기능을 제공한다. 또한 스프링은 스프링 컨테이너가 종료되기 직전에 소멸 콜백을 준다 스프링의 이벤트 라이프사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 초기화 콜백: 빈이 생성된 후, 의존관계 주입이 끝난 시점에 호출 소멸전 콜백: 빈이 소멸되기 직전에 호출 객체의 생성과 초기화의 분리 초기화는 의존관계 주입과는 다르..
Spring- 조회한 빈이 모두 필요할 때(Map, List) Map과 List를 사용해서 여러가지 스프링 빈 받아오기 예를 들어서 DiscountPolicy들 중에서 FixDiscountPolicy, RateDiscountPolicy가 모두 필요한 경우가 존재할 수도 있다. 기존 방법으로는 하나의 DiscountPolicy만 주입받아서 사용할 수 있었지만 Map과 List를 사용한다면 여러 DiscountPolicy를 필요에 따라서 받아 사용할 수 있다. package hello.core.autowired; import java.util.List; import java.util.Map; import static org.assertj.core.api.Assertions.assertThat; public class AllBeanTest { ApplicationCont..
Spring- 중복되는 빈이 있는 경우, 의존 관계 자동 주입의 여러가지 방법 빈(타입)이 중복되는 경우 - 사용할 기본 코드 package hello.core.beanoverlapping; public interface Toy { } package hello.core.beanoverlapping; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; @Component @Primary @Qualifier("robotToy") public class Robot implements Toy{ } package hello.core.beanover..
Spring- lombok @Getter, @Setter lombok을 설치 후 @Getter, @Setter 어노테이션을 사용하면, 굳이 코드로 getter, setter를 짜지 않아도 호출이 가능하다. package hello.core; import lombok.Getter; import lombok.Setter; @Getter @Setter /*클래스 내부에 getter, setter를 만들지 않아도 사용 가능*/ public class HelloLombok { private String name; private int age; public static void main(String[] args) { HelloLombok helloLombok = new HelloLombok(); helloLombok.setName("lomb..
Spring- 옵션 선택 옵션 처리 @Autowired(required=false) : 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨 org.springframework.lang.@Nullable : 자동 주입할 대상이 없으면 null이 입력된다. Optional : 자동 주입할 대상이 없으면 Optional.empty 가 입력된다. 스프링 빈이 등록되어있지 않은 경우 package hello.core.autowired; public class AutowiredTest { @Test void AutowiredOption(){ ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class); } @Component static class Te..
Spring- 의존관계 자동 주입 의존 관계 자동 주입 의존 관계 자동 주입은 크게 4 가지가 있다. 생성자 주입 수정자 주입(setter 주입) 필드 주입 일반 메서드 주입 생성자 주입 - 예시 package hello.core.order; @Component public class OrderServiceImpl implements OrderService{ //인터페이스에만 의존 (DIP 원칙 준수) private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; //@Autowired //생성자가 하나일 때는 @Autowired가 자동으로 삽입됨 public OrderServiceImpl(MemberRepository memberR..
Java- 제네릭(3) 와일드 카드 제네릭 클래스간 상속이 불가한 경우 예시 Box와 Box은 상속관계를 형성하지 않는다. Box와 Box은 상속관계를 형성하지 않는다. Object와 String이 상속관계를 가진다고 해도 Box와 Box은 상속관계를 형성하지 않는 별개의 자료형이라는 것을 제네릭(2)에서 설명했다. 대신 와일드 카드를 이용하면 가능하다. 와일드 카드 와일드 카드 문법 class Box{ private T ob; public T get() { return ob; } public void set(T ob) { this.ob = ob; } @Override public String toString(){ return ob.toString(); } } class UnBoxer{ public static T openBox(Box b..