μ€νλ§λΆνΈ - μμ‘΄κ΄κ³ μ£Όμ
π΅ μμ‘΄κ΄κ³ μ£Όμ μ λ°©λ² 3κ°μ§
1. μμ±μλ‘ μ£Όμ ππ»
@Autowired
public void OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
μμ κ°μ ννκ° μμ±μλ‘ μμ‘΄κ΄κ³λ₯Ό μ£Όμ νλ λ°©μμ΄λ€.
μμ±μκ° νλλΌλ©΄ Autowired μ΄λ Έν μ΄μ μλ΅ κ°λ₯νλ€.
2. setter μμ μλ‘ μ£Όμ (κΆμ₯νμ§ μμ) ππ»
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
@Autowired
public void setMemberRepository(MemberRepository memberRepository){
this.memberRepository = memberRepository;
}
λ³κ²½ κ°λ₯μ±μ΄ μλ μμ‘΄κ΄κ³μ μ¬μ©νλ€.
μμ μ μ£Όμ μ μ¬μ©ν μμλ setXxx λ©μλλ₯Ό public μΌλ‘ μ΄μ΄λμ΄μΌ νλ€. λκ΅°κ°κ° λ³κ²½ν΄λ²λ¦΄ κ°λ₯μ±μ΄ λλ€. λν, λ³κ²½ν΄μλ μλλ λ©μλλ₯Ό λ³κ²½ν μ μλλ‘ μ΄μ΄λλ κ² μμ²΄κ° λ¬Έμ μ΄λ€.
μλ° λΉ νλ‘νΌν°μ κ·μ½μ λ°λ₯΄λ λ©μλλͺ μ μ¬μ©νλ€.
μλ° λΉ νλ‘νΌν° κ·μ½μ΄λ? μμ μμΈ κ²½μ° setXxx(λ³μλͺ ) μ μ¬μ©νλ κ²
3. νλλ‘ μ£Όμ (κΆμ₯νμ§ μμ) ππ»
@Component
public class OrderServiceImpl implements OrderService{
@Autowired private final MemberRepository memberRepository;
@Autowired private final DiscountPolicy discountPolicy;
}
@Test
void fieldInjectionTest(){
OrderServiceImpl orderService = new OrderServiceImpl();
orderService.createOrder();
}
μ½λκ° κ°κ²°νμ§λ§ μΈλΆμμ λ³κ²½μ΄ λΆκ°λ₯νλ€.
μμν μλ°μ½λλ‘ ν μ€νΈν κ²½μ°, @Autowired κ° μλ―Έκ° μμ΄μ§λ―λ‘ NullPointExceptionμ΄ ν°μ§ μ μλ€.
μμ κ°μ΄ ν μ€νΈκ° λμμ λλ μμν μλ°μ½λμ΄λ―λ‘ @Autowired κ° μλ―Έκ° μκ² λκ³ , memberRepositoryμ discountPolicyλ μμ±μκ° μκΈ° λλ¬Έμ nullμ΄ λμ΄μ μ€λ₯κ° λλ€.
μ΄λ¬ν μ€λ₯κ° λμ§ μκ² νκΈ° μν΄μλ OrderServiceImpl ν΄λμ€ λ΄μ setterλ₯Ό λ°λ‘ λ§λ€μ΄ μ€μΌ νλ€. κ·Έλ΄ λ°μλ μμ±μλ‘ μ£Όμ νλ κ²μ΄ κ°μ₯ μ μ νλ€.
πΎ κ·Έλ₯ μμ±μλ‘ μ£Όμ ν΄λΌ! πΎ
λλΆλΆμ μμ‘΄κ΄κ³λ λ³κ²½λμ§ μκ³ , λ³κ²½λμ§ μλ κ²μ΄ λ°λμ§νλ€.
λ°λΌμ μμ μλ₯Ό μ¬μ©ν μ΄μ λ μκ³ , κ°λ¨νμ§λ§ λ°λ‘ μμ μλ₯Ό μ¬μ©ν΄μΌ νλ νλ μ£Όμ λ°©λ² μμλ μ¨μ μ’μ μ΄μ κ° μλ€.
λν μμ±μλ₯Ό μ΄μ©νκ² λλ©΄, final ν€μλλ₯Ό μ¬μ©ν μ μλ€. μ΄λ μΈλΆμμ ν¨λΆλ‘ λ³κ²½ν μ μκ² νκ³ μμ±μμμλ§ κ°μ λ³κ²½ν μ μκ² νλ€. (set μ κ²½μ°μλ κ°μ²΄κ° μμ±λ λ€μμ νΈμΆλλ κ²μ΄κΈ°μ final ν€μλλ₯Ό λΆμΌ μ μλ€)
κ²°λ‘ μ, μ¬λ§ν΄μλ μμ±μ μ£Όμ μ μ¬μ©νκ³ μμ μ΄λ μ΅μ μ΄ νμν κ²½μ°μ μμ μ μ£Όμ μ μ¬μ©νλ κ²μ΄ κΆμ₯λλ€.