Spring / ์์กด๊ด๊ณ ์ฃผ์ - ์์ฑ์, ์์ ์, ํ๋, ๋ฉ์๋
by rlaehddnd0422์ฌ๋ฌ๊ฐ์ง ์์กด๊ด๊ณ ์ฃผ์ ๋ฐฉ๋ฒ
ํฌ๊ฒ 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;
}
'๐ Backend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring / ๋กฌ๋ณต ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ด์ฉํ ์ฝ๋ ์ต์ ํ (0) | 2023.02.06 |
---|---|
Spring / ์์กด๊ด๊ณ ์ฃผ์ - @Autowired ์ต์ ์ฒ๋ฆฌ, ์์ฑ์ ์ฃผ์ ์ฌ์ฉ ๊ถ์ฅ (0) | 2023.02.06 |
Spring / @ComponentScan, @Component (1) | 2023.02.02 |
Spring / Single-ton Pattern, Single-ton Container (0) | 2023.01.31 |
Spring / Spring Container, Bean (0) | 2023.01.30 |
๋ธ๋ก๊ทธ์ ์ ๋ณด
Study Repository
rlaehddnd0422