Spring

    [Spring] 자동 주입 대상이 2개 이상일 때

    자동 주입 대상이 2개 이상일 때, @Autowired는 타입으로 조회하기 때문에 문제가 발생한다. Ex ) GradePolicy의 구현체이자 하위 타입인 RelativeGradePolicy, AbsoluteGradePolicy가 모두 스프링 빈으로 등록이 되어 있을 때 자동으로 의존 관계를 주입할 수 없음. (선택의 기준이 없기 때문) 하위 타입으로 지정하면 해결할 수 있지만, 이는 DIP를 위배하고 유연성이 떨어지기 때문에 좋은 방법이 아니다. 또 한, 이름만 다르고 완전히 똑같은 타입의 스프링 빈이 2개 있을 때는 해결이 되지 않는다. 스프링 빈을 수동으로 등록하는 방법을 생각할 수 있지만, 의존 관계 자동 주입에서 제공하는 여러 방법이 있는데 이를 이용하는 것이 좋다. 의존 관계 자동 주입 방법 ..

    [Spring] 다양한 의존 관계 주입 방법

    생성자 주입 생성자를 통해서 의존 관계를 주입 받는 방법으로 호출 시점에 딱 1번만 호출이 된다. → 이후에 변화가 없고, 꼭 필요한 필수 의존관계에 사용된다. public class StudnetServiceImpl implements StudentService{ private final StudentRepository studentRepository; private final GradePolicy gradePolicy; @Autowired public StudnetServiceImpl(StudentRepository studentRepository, GradePolicy gradePolicy) { this.studentRepository = studentRepository; this.gradePoli..

    [Spring] 스프링 컨테이너

    [Spring] 스프링 컨테이너

    스프링 컨테이너 생성 스프링 컨테이너를 생성할 때는 ApplicationContext라는 인터페이스를 이용하며, 상황에 맞는 구현 객체를 생성해주면 된다. 스프링 부트의 등장 이후 Annotation을 많이 사용하기 때문에 AnnotationConfigApplicationContext를 주로 이용한다. 인자로는 @Configuration 어노테이션이 붙은 설정 클래스 파일을 넘겨주면 된다. ApplicationContext ac = new AnnotationConfigApplicationContext(Config.class); 스프링 컨테이너의 생성 과정 스프링 컨테이너를 생성할 때 매개 변수로 Configuration 클래스 파일을 넘겨주는데, 스프링 컨테이너는 이 클래스 파일을 참고하여 빈 이름과 객..