-
์์กด๊ด๊ณ ์๋ ์ฃผ์ @AutowiredSpring 2022. 4. 12. 17:07
๐ ๋ค์ํ ์์กด๊ด๊ณ ์ฃผ์ ๋ฐฉ๋ฒ
- ์์ฑ์ ์ฃผ์
- ์์ ์ ์ฃผ์ (setter ์ฃผ์ )
- ํ๋ ์ฃผ์
- ์ผ๋ฐ ๋ฉ์๋ ์ฃผ์
๐ก ์์ฑ์ ์ฃผ์
- ์์ฑ์๋ฅผ ํตํด์ ์์กด ๊ด๊ณ๋ฅผ ์ฃผ์ ๋ฐ๋ ๋ฐฉ๋ฒ
- ์์ฑ์ ํธ์ถ์์ ์ ๋ฑ 1๋ฒ๋ง ํธ์ถ๋๋ ๊ฒ์ด ๋ณด์ฅ๋๋ค
- ๋ถ๋ณ, ํ์ ์์กด๊ด๊ณ์ ์ฌ์ฉ
- ์์ฑ์์ @Autowired ์ ๋ ธํ ์ด์ ๋ถ์ด๊ธฐ
@Component public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } }
โ๏ธ ์์ฑ์๊ฐ ๋ฑ 1๊ฐ๋ง ์์ผ๋ฉด @Autowired๋ฅผ ์๋ตํด๋ ์๋ ์ฃผ์ ๋๋ค. <- ๋ฌผ๋ก ์คํ๋ง ๋น์๋ง ํด๋น
๐ก ์์ ์ ์ฃผ์ (setter ์ฃผ์ )
- setter๋ผ ๋ถ๋ฆฌ๋ ํ๋์ ๊ฐ์ ๋ณ๊ฒฝํ๋ ์์ ์ ๋ฉ์๋๋ฅผ ํตํด์ ์์กด๊ด๊ณ ์ฃผ์
- ์ ํ, ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ด ์๋ ์์กด๊ด๊ณ์ ์ฌ์ฉ
- ์๋ฐ๋น ํ๋กํผํฐ ๊ท์ฝ์ ์์ ์ ๋ฉ์๋ ๋ฐฉ์์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ด๋ค
โ๏ธ @Autowired์ ๊ธฐ๋ณธ ๋์์ ์ฃผ์ ํ ๋์์ด ์์ผ๋ฉด ์ค๋ฅ๊ฐ ๋ฐ์
-> ์ฃผ์ ํ ๋์์ด ์์ด๋ ๋์ํ๊ฒ @Autowired(required = false)๋ก ์ง์ ํ๋ค
๐ก ํ๋ ์ฃผ์
- ํ๋์ ๋ฐ๋ก ์ฃผ์ ํ๋ ๋ฐฉ๋ฒ
- ์ฝ๋๊ฐ ๊ฐ๊ฒฐํ์ง๋ง ์ธ๋ถ์์ ๋ณ๊ฒฝ์ด ๋ถ๊ฐ๋ฅํด ํ ์คํธ ํ๊ธฐ ํ๋ค๋ค
- DI ํ๋ ์์ํฌ๊ฐ ์์ผ๋ฉด ์๋ฌด๊ฒ๋ ํ ์ ์๋ค
- ์ฌ์ฉํ์ง ๋ง์!
: ์ ํ๋ฆฌ์ผ์ด์ ์ ์ค์ ์ฝ๋์ ๊ด๊ณ ์๋ ํ ์คํธ ์ฝ๋
: ์คํ๋ง ์ค์ ์ ๋ชฉ์ ์ผ๋ก ํ๋ @Configuration ๊ฐ์ ๊ณณ์์๋ง ํน๋ณํ ์ฉ๋๋ก ์ฌ์ฉ
@Component public class OrderServiceImpl implements OrderService { @Autowired private MemberRepository memberRepository; @Autowired private DiscountPolicy discountPolicy; }
๐ก ์ผ๋ฐ ๋ฉ์๋ ์ฃผ์
- ์ผ๋ฐ ๋ฉ์๋๋ฅผ ํตํด์ ์ฃผ์ ๋ฐ์ ์ ์๋ค
- ํ๊บผ์ ์ฌ๋ฌ ํ๋๋ฅผ ์ฃผ์ ๋ฐ์ ์ ์๋ค
- ์ผ๋ฐ์ ์ผ๋ก ์ ์ฌ์ฉํ์ง ์๋๋ค
@Component public class OrderServiceImpl implements OrderService { private MemberRepository memberRepository; private DiscountPolicy discountPolicy; @Autowired public void init(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } }
โ๏ธ ์์กด๊ด๊ณ ์๋ ์ฃผ์ ์ ์คํ๋ง ์ปจํ ์ด๋๊ฐ ๊ด๋ฆฌํ๋ ์คํ๋ง ๋น์ด์ด์ผ ๋์ํ๋ค
์คํ๋ง ๋น์ด ์๋ Member๊ฐ์ ํด๋์ค์์ @Autowired์ฝ๋๋ฅผ ์ ์ฉํด๋ ์๋ฌด ๊ธฐ๋ฅ๋ ๋์ํ์ง ์๋๋ค
๐ก ์ต์ ์ฒ๋ฆฌ
- ์ฃผ์ ํ ์คํ๋ง ๋น์ด ์์ด๋ ๋์ํด์ผ ํ ๋๊ฐ ์๋ค
- @Autowired(required = false) : ์๋ ์ฃผ์ ํ ๋์์ด ์์ผ๋ฉด ์์ ์ ๋ฉ์๋ ์์ฒด๊ฐ ํธ์ถ ์๋จ
- org.springframework.lang.@Nullable : ์๋ ์ฃผ์ ํ ๋์์ด ์์ผ๋ฉด null์ด ์ ๋ ฅ๋๋ค
- Optional<> : ์๋ ์ฃผ์ ํ ๋์์ด ์์ผ๋ฉด Optional.empty๊ฐ ์ ๋ ฅ๋๋ค
//ํธ์ถ ์๋จ @Autowired(required = false) public void setNoBean1(Member member) { System.out.println("setNoBean1 = " + member); } //null ํธ์ถ @Autowired public void setNoBean2(@Nullable Member member) { System.out.println("setNoBean2 = " + member); } //Optional.empty ํธ์ถ @Autowired(required = false) public void setNoBean3(Optional<Member> member) { System.out.println("setNoBean3 = " + member); }
โ๏ธ ์์ฑ์ ์ฃผ์ ์ ์ ํํด๋ผ!
โ ๋ถ๋ณ
- ๋๋ถ๋ถ์ ์์กด๊ด๊ณ ์ฃผ์ ์ ํ๋ฒ ์ผ์ด๋๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ข ๋ฃ์์ ๊น์ง ์์กด๊ด๊ณ๋ฅผ ๋ณ๊ฒฝํ ์ผ์ด ์๋ค
-> ์คํ๋ ค ๋ณํ๋ฉด ์๋๋ค (๋ถ๋ณํด์ผ ํ๋ค)
- ์์ ์ ์ฃผ์ ์ ์ฌ์ฉํ๋ฉด, setXxx ๋ฉ์๋๋ฅผ public์ผ๋ก ์ด์ด๋์ด์ผ ํ๋ค
-> ๋๊ตฐ๊ฐ ๋ณ๊ฒฝํ ์ ๋ ์๊ณ , ๋ณ๊ฒฝํ๋ฉด ์๋๋ ๋ฉ์๋๋ฅผ ์ด์ด๋๋ ๊ฒ์ ์ข์ ์ค๊ณ ๋ฐฉ๋ฒ์ด ์๋๋ค
- ์์ฑ์ ์ฃผ์ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ ๋ ๋ฑ 1๋ฒ๋ง ํธ์ถ๋๋ฏ๋ก ์ดํ์ ํธ์ถ๋๋ ์ผ์ด ์๋ค -> ๋ถ๋ณํ๊ฒ ์ค๊ณ ๊ฐ๋ฅ
โ ๋๋ฝ
- ์ฃผ์ ๋ฐ์ดํฐ๋ฅผ ๋๋ฝ ํ์ ๋ ์ปดํ์ผ ์ค๋ฅ๊ฐ ๋ฐ์ํจ์ผ๋ก์จ IDE์์ ๋ฐ๋ก ์ด๋ค ๊ฐ์ ํ์๋ก ์ฃผ์ ํด์ผ ํ๋์ง ์ ์ ์๋ค
โ final ํค์๋
- ์ค์ง ์์ฑ์ ์ฃผ์ ์์๋ง final ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค
-> ์์ฑ์์๊ฒ ํน์๋ผ๋ ๊ฐ์ด ์ค์ ๋์ง ์๋ ์ค๋ฅ๋ฅผ ์ปดํ์ผ ์์ ์ ๋ง์์ค๋ค
๐ก ๋กฌ๋ณต
- @RequiredArgsConstructor : final์ด ๋ถ์ ํ๋๋ฅผ ๋ชจ์ ์์ฑ์๋ฅผ ์๋์ผ๋ก ๋ง๋ค์ด์ค๋ค
@Component @RequiredArgsConstructor public class OrderServiceImpl implements OrderService { private final MemberRepository memberRepository; private final DiscountPolicy discountPolicy; }
๐ก @Autowired ํ๋ ๋ช , @Qualifier, @Primary
โ๏ธ ์กฐํ ๋์ ๋น์ด 2๊ฐ ์ด์์ผ ๋ ํด๊ฒฐ ๋ฐฉ๋ฒ
- @Autowired ํ๋ ๋ช ๋งค์นญ
- @Qualifier -> @Qualifier๋ผ๋ฆฌ ๋งค์นญ -> ๋น ์ด๋ฆ ๋งค์นญ
- @Primary ์ฌ์ฉ
๐ @Autowired ํ๋ ๋ช ๋งค์นญ
- 1. @Autowired๋ ํ์ ๋งค์นญ
- 2. ํ์ ๋งค์นญ์ ๊ฒฐ๊ณผ๊ฐ 2๊ฐ ์ด์์ผ ๋ ํ๋๋ช , ํ๋ผ๋ฏธํฐ ๋ช ์ผ๋ก ๋น ์ด๋ฆ์ ์ถ๊ฐ ๋งค์นญํ๋ค
๐ @Qualifier ์ฌ์ฉ
- @Qualifier๋ ์ถ๊ฐ ๊ตฌ๋ถ์๋ฅผ ๋ถ์ฌ์ฃผ๋ ๋ฐฉ๋ฒ
: ์ฃผ์ ์ ์ถ๊ฐ์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๊ฒ์ด์ง ๋น ์ด๋ฆ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ์๋๋ค
- 1. @Qualifier ๋ผ๋ฆฌ ๋งค์นญ
- 2. ๋น ์ด๋ฆ ๋งค์นญ
- 3. NoSuchBeanDefinitionException ์์ธ ๋ฐ์
@Component @Qualifier("mainDiscountPolicy") public class RateDiscountPolicy implements DiscountPolicy {}
@Component @Qualifier("fixDiscountPolicy") public class FixDiscountPolicy implements DiscountPolicy {}
@Autowired public OrderServiceImpl(MemberRepository memberRepository, @Qualifier("mainDiscountPolicy") DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; }
* ์ฃผ์ ์ @Qualifier๋ฅผ ๋ถ์ฌ์ฃผ๊ณ ๋ฑ๋กํ ์ด๋ฆ์ ์ ์ด์ค๋ค
* ์ง์ ๋น ๋ฑ๋ก์์๋ @Qualifier๋ฅผ ๋์ผํ๊ฒ ์ฌ์ฉํ ์ ์๋ค
๐ @Primary ์ฌ์ฉ
- ์ฐ์ ์์๋ฅผ ์ ํ๋ ๋ฐฉ๋ฒ
- @Autowired ์์ ์ฌ๋ฌ ๋น์ด ๋งค์นญ๋๋ฉด @Primary๊ฐ ์ฐ์ ๊ถ์ ๊ฐ์ง๋ค
@Component @Primary public class RateDiscountPolicy implements DiscountPolicy {} @Component public class FixDiscountPolicy implements DiscountPolicy {}
//์์ฑ์ @Autowired public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) { this.memberRepository = memberRepository; this.discountPolicy = discountPolicy; } //์์ ์ @Autowired public DiscountPolicy setDiscountPolicy(DiscountPolicy discountPolicy) { return discountPolicy; }
'Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋น ์ค์ฝํ (0) 2022.04.13 ๋น ์๋ช ์ฃผ๊ธฐ ์ฝ๋ฐฑ (0) 2022.04.12 ์ปดํฌ๋ํธ ์ค์บ (0) 2022.04.12 ์ฑ๊ธํค ์ปจํ ์ด๋ (0) 2022.04.12 ์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น (0) 2022.04.12