Spring / μμ‘΄κ΄κ³ μ£Όμ - μμ±μ, μμ μ, νλ, λ©μλ
μ¬λ¬κ°μ§ μμ‘΄κ΄κ³ μ£Όμ λ°©λ²
ν¬κ² 4κ°μ§ λ°©λ²μ΄ μλ€.
1. μμ±μ μ£Όμ
2. sertter μ£Όμ
3. νλ μ£Όμ
4. λ©μλ μ£Όμ
1. μμ±μ μ£Όμ
μμ±μ μ£Όμ λ°©μμ μ§κΈκΉμ§ μ¬μ©ν΄μ¨ λ°©λ²μΌλ‘ μμ±μλ₯Ό ν΅ν΄μ μμ‘΄ κ΄κ³λ₯Ό μ£Όμ λ°λ λ°©λ².
@Component
public class OrderServiceImp implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImp(MemberRepository memberRepository, DiscountPolicy discountPolicy)
{
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
νΉμ§
μμ±μ νΈμΆμμ μμ λ± 1λ²λ§ νΈμΆλλ κ²μ΄ 보μ₯λ¨.
λΆλ³, νμ μμ‘΄κ΄κ³μ μ¬μ©νλ λ°©λ²
Tip : μμ±μ λ©μλκ° νλλ°μ μλ κ²½μ° @Autowiredλ₯Ό μλ΅ν΄λ μλ μ£Όμ λλ€. λ¬Όλ‘ μ€νλ§ λΉμ νν΄μ
2. setter μ£Όμ
setterλΌ λΆλ¦¬λ νλμ κ°μ λ³κ²½νλ μμ μ λ©μλλ₯Ό ν΅ν΄ μμ‘΄κ΄κ³λ₯Ό μ£Όμ νλ λ°©λ².
νΉμ§
- μ ν, λ³κ²½ κ°λ₯μ±μ΄ μλ μμ‘΄κ΄κ³μ μ¬μ©
- μλ°λΉ νλ‘νΌν° κ·μ½μ μμ μ λ©μλλ₯Ό μ¬μ©νλ λ°©λ²
@Component
public class OrderServiceImp implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public void setMemberRepository(MemberRepository memberRepository)
{
this.memberRepository = memberRepository;
}
@Autowired
public void setDiscountPolicy(DiscountPolicy discountPolicy)
{
this.discountPolicy = discountPolicy;
}
μ°Έκ³ : @Autowiredμ κΈ°λ³Έ λμμ μ£Όμ ν λμμ΄ μμΌλ©΄ μ€λ₯κ° λ°μνλ€. μ£Όμ ν λμμ΄ μμ΄λ λμνκ² νλ €λ©΄ @Autowired(required = false) λ‘ μ§μ νλ©΄ λλ€.
3. νλ μ£Όμ
μ΄λ¦ κ·Έλλ‘ νλμ κ·Έλ₯ λ°λ‘ μ£Όμ νλ λ°©λ²
@Component
public class OrderServiceImp implements OrderService{
@Autowired private MemberRepository memberRepository;
@Autowired private DiscountPolicy discountPolicy;
μ½λκ° κ°κ²°νλ€λ μ₯μ μ΄ μμ§λ§, μΈλΆμμ λ³κ²½μ΄ λΆκ°λ₯ν΄μ ν μ€νΈνκΈ° νλ€λ€λ μΉλͺ μ μΈ λ¨μ μ΄ μλ€.
μ¬μ©νμ§ λ§μ.
DI νλ μμν¬κ° μλ μμ μλ°μ½λμμλ μ무κ²λ ν μκ° μλ€.
μμ μλ°μ½λμμλ @Autowiredκ° λμνμ§ μμ μμ‘΄κ΄κ³ μ£Όμ μ΄ μλμ΄ ν μ€νΈλ₯Ό ν μκ° μλ€.
@Test
void filedInjectionTest()
{
OrderServiceImp orderServiceImp = new OrderServiceImp();
orderServiceImp.setMemberRepository(new MemoryMemberRepository());
orderServiceImp.setDiscountPolicy(new FixDiscountPolicy());
Member member = new Member(1L,"kimdongwoong",Grade.VIP);
MemberRepository memberRepository = ac.getBean(MemberRepository.class);
memberRepository.save(member);
Order itemA = orderService.createOrder(1L, "itemA", 1000);
System.out.println(itemA);
}
μ΄μ κ°μ μμν μλ° ν μ€νΈ μ½λμλ λΉμ°ν @Autowiredκ° λμνμ§ μλλ€. λ°λΌμ setterλ₯Ό ν΅ν΄ μμ‘΄κ΄κ³λ₯Ό μ£Όμ ν΄μ£Όμ΄μΌ νλ€. @SpringBootTest μ²λΌ μ€νλ§ μ»¨ν μ΄λλ₯Ό ν μ€νΈμ ν΅ν©ν κ²½μ°μλ§ κ°λ₯νλ€.
4. μΌλ° λ©μλ μ£Όμ
μΌλ° λ©μλλ₯Ό ν΅ν΄μ μ£Όμ λ°μ μ μλ€.
νΉμ§
1. νλ²μ μ¬λ¬ νλλ₯Ό μ£Όμ λ°μ μ μλ€.
2. μ μ¬μ©νμ§ μλλ€.
@Component
public class OrderServiceImp implements OrderService {
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
@Autowired
public void Autowired_method1(MemberRepository memberRepository, DiscountPolicy discountPolicy)
{
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}