본문 바로가기

Spring27

TIL-5 @Autowired @Qualifier @Primary, 어노테이션 생성, 조회한 Bean을 모두 사용하고 싶을 경우 @Autowired는 Type으로 조회한다. Type으로 조회하기 때문에 다음 코드와 유사하게 동작한다 (실제로는 더 많은 기능을 제공한다.) ac.getBean(DiscountPolicy.class) 조회 빈을 2개로 만들어 어떤 문제가 발생하는지 알아보자. DiscountPolicy 인터페이스에 2개의(Fix, Rate) 구현체에 @Component 어노테이션을 달았다. 이제 @Autowired로 DiscountPolicy를 주입 받을려고 하면 아래와 같은 충돌이 일어나게 된다. 기대한 값은 하나의 빈인데 발견한건 2개가 되어 어떤 걸 매칭할지 정할 수 없어 생기는 컴파일 오류이다. 이때 주의할 점은 하위타입으로 지정하는 것인데 이렇게 하면 DIP를 위배하고 유연성이 떨어진다. 그리고 이름은 다르지만.. 2023. 5. 18.
TIL-4 다양한 의존관계 주입방법, 생성자 주입 의존관계 주입은 크게 4가지 방법이 있다. 생성자, 수정자(setter), 필드 주입, 일반 메서드 주입 1. 생성자주입 생성자 호출 시점에 1번만 호출되는 것이 보장된다. 불변, 필수 의존관계에 사용된다. 수정이 가능하도록 해버리면 누군가가 변경할 일이 있어 문제가 생길 수 있다. 필수로 값이 들어가야 할 때 사용한다. 중요! 생성자가 1개라면 @Autowired 어노테이션을 생략해도 된다. 2. 수정자 주입 Setter라 불리는 필드의 값을 변경하는 수정자 메서드를 통해 의존관계를 주입한다. 선택, 변경 가능성이 있는 의존관계에 사용한다. 자바 빈 프로퍼티 규약의 수정자 메서드 방식을 사용하는 방법이다. setMemberRepository setDiscountPolicy 등 메서드를 호출할 때 의존관.. 2023. 5. 17.
TIL-2 컴포넌트 스캔과 의존 관계 자동 주입 DI 스프링 빈을 등록할 대는 자바 코드 @Bean, XML 등을 통해 직접 스프링 빈을 나열했다. 하지만 수십 수백개가 되면 일일히 등록하기도 귀찮고 누락위험이 있다. 그래서 설정 정보가 따로 없어도 자동으로 스프링 빈을 등록하는 컴포넌트 스캔이라는 기능을 제공한다. 의존관계도 자동으로 주입하는 @Autowired라는 기능도 제공한다. 컴포넌트 스캔은 @Component 어노테이션이 붙은 클래스를 찾아 자동으로 스프링 빈으로 등록해준다. (excludeFilters : 자동으로 스프링빈으로 등록되는 것 중에 제외 시킬 것을 정한다.) (여기에선 Configuration 클래스를 제외하도록 설정했다.) AppConfig.class는 설정 파일이기 때문에 컴포넌트 어노테이션 충돌이 일어나기 때문에 제외하였다. .. 2023. 5. 16.