생성자, 수정자, 필드 ,메서드 4가지
생성자가 딱 1개만 있으면 @Autowired를 생략해도 자동 주입
setter
을 통해 의존관계 주입선택, 변경
가능성이 있는 의존관계에 사용 (거의 사용할일 없음)@Configuration
같은 곳에서만 특별한 용도로 사용주입할 스프링 빈이 없어도 동작해야 될 때
@Autowired(required=false)
: 대상이 없으면 메서드 자체가 호출안됨org.springframework.lang.@Nullable
: 대상없으면 null입력Optional<>
과거에는 필드 주입을 많이 사용했지만, 최근에는 DI 프레임워크 대부분이 생성자 주입을 권장
불변
누락
final
선언 가능
@Autowired
는 타입으로 조회하는데, 같은 타입이 2개 이상이라면??
수동으로 등록해서 해결할 수도 있다
@Autowired
는 타입 매칭을 시도하고, 이때 여러 빈이 있으면 필드 이름, 파라미터 이름으로 추가 매칭
추가 구분자를 붙여주는 방법 (주입시 추가적인 방법을 제공)
주입할 객체, 주입받을 객체에 모두
@Qualifier
붙여줘야됨
빈등록할때
@Component
@Qualifier("mainDiscountPolicy")
public class RateDiscountPolicy implements DiscountPolicy...
찾을때
@Autowired
public OrderServiceImpl(MemberRepository memberRepository,
@Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy) {
...
}
@primary
가 있으면, 다 무시하고 우선권을 가짐
@Component
@Primary
public class RateDiscountPolicy implements DiscountPolicy{
Map<String, 타입>
으로 주입받으면, 해당 타입의 <빈이름 :객체> Map
을 받을 수 있다.List
로 주입받으면 모든 빈을 담아준다웬만하면 자동을 쓰는 추세
애플리케이션은 크게 업무 로직, 기술지원 로직으로 나눌 수 있다.
업무 로직의 경우는 자동 빈 권장
기술 지원 로직은 수가 매우 적고, 애플리케이션 전반에 걸쳐서 광범위한 영향
또한 적용이 잘 되나조차 파악하기 어려운 경우가 많음
따라서 수동으로 등록하여 설정정보에 바로 나타나게 하는것이 유지보수에 좋음