분류 전체보기(63)
-
의존 주입할 빈이 두개 이상 조회 될 때
@Autowired는 스프링 컨테이너에서 타입으로 빈을 조회를 한다. 의존 주입을 해야하는데 여러 개의 빈이 조회된다면 에러가 난다. 그렇다면 타입으로 조회시 두개 이상의 빈이 조회될 때는 어떤 빈을 선택해야할까? 추상 클래스를 받고있는 객체라면 타입은 같지만 하위 클래스로 여러 클래스를 둘 수 있다. 이런 경우에는 타입이 같은 빈이 여러개 등록될 수 있는데 Pg의 하위 클래스로 Inicis와 KakaoPay 가 빈 등록이 되있다고 하면 @Autowired의 의존 주입 매칭 첫번째로 타입 매칭 -> 타입으로 매칭해서 빈이 하나면 빈 이름에 상관없이 가져와서 의존관계 주입 타입 매칭시 결과 2개 이상일 때 -> 파라미터 명으로 빈 이름 매칭 public Payment(Pg pg){ this.pg = pg;..
2022.10.26 -
의존관계 자동 주입 방법
의존관계가 무엇인지에 대해서는 IOC와 DI에서! @AutoWired란? 스프링이 의존관계를 주입(DI)할 때 사용되는 애노테이션이다. 의존주입에 필요한 객체의 타입에 맞는 빈을 스프링 컨테이너에서 찾아와 의존관계를 주입해준다. 때문에 자동 의존 관계 주입은 스프링 컨테이서에서 관리되는 스프링 빈이여야만 동작한다. 1) 생성자 주입 @Component public class MemberServiceImpl implements MemberService { private final MemberRepository memberRepository; @Autowired public MemberServiceImpl(MemberRepository memberRepository) { this.memberRepositor..
2022.10.26 -
컴포넌트 스캔과 자동 의존관계 주입
해당 내용은 김영한님의 인프런_[스프링 핵심 원리]를 기본으로 합니다. @ComponentScan 스프링은 @Configuration과 @Bean으로 빈등록을 하는 방법도 있지만 자동으로 스프링 빈을 등록해주는 컴포넌트 스캔 기능을 제공한다. 이름 그대로 @ComponentScan을 붙여주면 패키지를 탐색하여 @Component 애노테이션이 붙은 클래스를 스캔해서 스프링 빈으로 등록해준다. @ComponentScan( basePackages = "hello.core", basePackageClasses = "AutoAppConfig.class" ) @ComponentScan 은 @Component 가 붙은 모든 클래스를 스프링 빈으로 등록한다. @Component는 컴포넌트 스캔에서 사용되는 애노테이션이..
2022.10.26 -
Configuration과 싱글톤
해당 내용은 김영한님의 인프런_[스프링 핵심 기술]을 바탕으로 합니다. 스프링 컨테이너는 빈의 싱글톤을 보장해준다고 했다. 이전에 스프링 컨테이너와 스프링 빈 에서 @Configuration과 @Bean 애노테이션을 사용해 스프링 컨테이너에 빈을 등록한다고 했는데 위의 코드를 보면 memberRepository()가 총 세번 호출이 된다. 즉, 위의 코드로 봤을 땐 new MemoryMemberRepository()가 세 번 호출 된것처럼 보인이고 객체도 3개가 생성된것처럼 보인다. 하지만 memberRepository가 쓰이는 클래스에서 memberRepository의 참조값을 가져와 출력해보면 같은 객체가 사용됨을 볼 수 있다. 그러면 스프링 컨테이너에서 memberRepository객체는 어떻게 싱..
2022.10.26 -
싱글톤 패턴
웹 어플리케이션의 특성상 고객 요청이 굉장히 많은데 이런 요청들에 필요한 객체를 요청마다 생성하게 된다면 메모리 낭비가 심하다. 이런 문제점을 해결하고자 객체를 하나만 만들어서 공유하도록 하는방법이 있다. 요청이 100이면 100개를 만드는것이 아닌 하나의 인스턴스를 가지고 공유하는것이다. 참고로 객체를 생성하는것보다 참조로 가져오는것이 훨씬! 효율적이다. 싱글톤 패턴이란 클래스의 인스턴스가 딱 1개만 생성되는 것을 보장하는 디자인 패턴이다. 때문에 private 생성자를 사용해 외부에서 new로 생성하지 못하게 막아야 한다. public class SingletonService { private static final SingletonService instance = new SingletonServic..
2022.10.26 -
BeanDefinition - 스프링 빈 설정 메타 정보
BeanDefinition - 스프링 빈 설정 메타 정보 해당 정보는 김영한 님의 인프런_[스프링 핵심 원리]를 참고했습니다. BeanDefinition 은 속성 값, 생성자 인수 값 및 구체적인 구현에서 제공하는 추가 정보가 있는 빈 인스턴스를 설명한다. 스프링 컨테이너는 이 메타정보를 기반으로 인스턴스(빈)를 생성할 수 있다. @Bean , 당 각각 하나씩 메타 정보가 생성된다. BeanDefinition 정보 BeanClassName: 생성할 빈의 클래스 명(자바 설정 처럼 팩토리 역할의 빈을 사용하면 없음) factoryBeanName: 팩토리 역할의 빈을 사용할 경우 이름, 예) appConfig factoryMethodName: 빈을 생성할 팩토리 메서드 지정, 예) memberService ..
2022.10.26