- Today
- Total
- λ€μ΅μ€νΈλΌ
- λ°±μλ
- database
- 그리λ
- Graph
- μΈν΄
- Algorithm
- μλ£κ΅¬μ‘°
- μ‘Έμ μν
- spring
- pytorch
- λ°μ΄ν°λ² μ΄μ€
- PS
- μλ°
- λ°±μ€
- ꡬν
- tree
- OOP
- java
- array
- 벨λ§ν¬λ
- MST
- CS
- μλ°μμ μ
- dp
- μμμ λ ¬
- leetcode
- λ¬Έλ²
- νλ‘κ·Έλλ¨Έμ€
- BFS
Partially Committed
[Spring] μμ‘΄κ΄κ³ μλ μ£Όμ λ³Έλ¬Έ
λ€μν μμ‘΄κ΄κ³ μ£Όμ
λ€μν μμ‘΄ κ΄κ³ μ£Όμ λ°©λ²
- μμ±μ μ£Όμ
: μμ±μλ₯Ό ν΅ν΄ μμ‘΄ κ΄κ³λ₯Ό μ£Όμ λ°λ κ²μΌλ‘, μμ±μ νΈμΆ μμ μ λ± νλ²λ§ νΈμΆ λλ κ²μ΄ 보μ₯λλ κ²μ΄ νΉμ§μ΄λ€. λΆλ³, νμ μμ‘΄κ΄κ³μ μ¬μ©νλ€.
- μμ μ μ£Όμ (Setter μ£Όμ )
- νλ μ£Όμ
- μΌλ° λ©μλ μ£Όμ
# μμ±μ μ£Όμ
@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;
}
@Override
public Order createOrder(Long memberId, String itemName, int itemPrice) {
Member member = memberRepository.findById(memberId);
int discountPrice = discountPolicy.discount(member, itemPrice);
return new Order(memberId, itemName, itemPrice, discountPrice);
}
// for test
public MemberRepository getMemberRepository(){
return memberRepository;
}
}
μμ κ°μ΄ μ΄μ μ ꡬννμλ€.
>> OrderServiceImpl ν΄λμ€μ @Component μ λ Έν μ΄μ μ΄ μμΌλ―λ‘ μ»΄ν¬λνΈ μ€μΊμ μ§ννλ©°, μ€νλ§ μ»¨ν μ΄λμ OrderService ν΄λμ€κ° λΉμΌλ‘ λ±λ‘μ΄ λλ€. λ±λ‘μ΄ λ λ €λ©΄ μμ±μκ° νΈμΆμ΄ λμ΄μΌ νκ³ , λ§μΉ¨ μμ±μμλ @Autowired μ λ Έν μ΄μ μ΄ μ‘΄μ¬νλ€. κ·Έλ¬λ©΄ μ€νλ§ μ»¨ν μ΄λμμ MemberRepository μ DiscountPolicy λ₯Ό κΊΌλ΄μ μμ‘΄κ΄κ³λ₯Ό μ£Όμ ν΄μ€λ€. μ΄μ κ°μ λ°©λ²μ΄ μμ±μ μ£Όμ μΌλ‘ νΈμΆ μμ μ λ¨ νλ²λ§ νΈμΆλκΈ° λλ¬Έμ, λΆλ³/νμ μμ‘΄ κ΄κ³μ μ£Όλ‘ μ¬μ©λλ€. κ°μ μΈν ν λ€μμ λμ΄μ λ°λλ κ²μ μνμ§ μλ κ²½μ°μλ μμ μ λ©μλ(setter, getter)λ₯Ό λ§λ€μ§ μλ κ²μ΄ μ’λ€.
μ OrderServiceImple μμ μλμ κ°μ΄ final λ‘ μ€μ ν κ²μ μ μ μλ€.
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
@Autowired
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
κ·Έλ¬λ©΄ memberRepository μ discountPolicy λ λ°λμ κ°μ΄ μ‘΄μ¬ν΄μΌ νλ©°, μ‘΄μ¬νμ§ μμΌλ©΄ μ μ½λμμ μ»΄νμΌ μ€λ₯κ° λ°μνλλ‘ μλ°©ν κ²μ΄λ€.
* μ€μν κ²μ μμ±μκ° λ¨ νκ°λ§ μμΌλ©΄ @Autowired λ₯Ό μλ΅νμ¬λ μλ μ£Όμ μ΄ λλ€.(μ€νλ§ λΉμλ§ ν΄λΉ)
# μμ μ μ£Όμ (Setter μ£Όμ )
- setter νλμ κ°μ λ³κ²½νλ μμ μ λ©μλλ₯Ό ν΅ν΄μ μμ‘΄κ΄κ³λ₯Ό μ£Όμ νλ€.
- μ ν, λ³κ²½ κ°λ₯μ±μ΄ μλ μμ‘΄ κ΄κ³μ μ¬μ©νλ©° μλ°λΉ νλ‘νΌν° κ·μ½μ μμ μ λ©μλ λ°©μμ μ¬μ©νλ λ°©λ²μ΄λ€.
private MemberRepository memberRepository;
private DiscountPolicy discountPolicy;
@Autowired
public void setMemberRepository(MemberRepository memberRepository){
System.out.println("memberRepository = " + memberRepository);
this.memberRepository = memberRepository;
}
@Autowired
public void setDiscountPolicy(DiscountPolicy discountPolicy){
System.out.println("discountPolicy = " + discountPolicy);
this.discountPolicy = discountPolicy;
}
- μμ±μ μ£Όμ μ μλ° μ€νλ§μ΄ λΉμ λ±λ‘νκΈ° μν΄ OrderService κ°μ²΄λ₯Ό μμ±ν λ μμ±μκ° λ¬΄μ‘°κ±΄ νΈμΆλλ―λ‘, λΉμ λ±λ‘μ΄ λ λ μμ‘΄κ΄κ³κ° μ£Όμ λλλ‘ νλ€.
- μμ μ μ£Όμ μ λΉ λ±λ‘ μμ μ΄ μλ, λ λ²μ§Έ λ¨κ³(μμ‘΄κ΄κ³λ₯Ό λ±λ‘νλ)μμ μμ‘΄κ΄κ³κ° λ±λ‘λλλ‘ νλ κ²μ΄λ€.
- @Autowired λ μ£Όμ ν λμμ΄ μμΌλ©΄ μ€λ₯κ° λ°μνλ€. μ£Όμ ν λμμ΄ μμ΄λ λμνκ² νλ €λ©΄ @Autowired(required = false) λΌκ³ νλ©΄ λλ€.
- μλ°λΉ νλ‘νΌν°, μλ°μμλ νλμ κ°μ μ§μ λ³κ²½νμ§ μκ³ setter, getter λ©μλλ₯Ό ν΅ν΄ κ°μ μ½κ³ , λ³κ²½νλ κ·μΉμ λ§λ€μλλ° μ΄λ₯Ό μλ°λΉ νλ‘νΌν° κ·μ½μ΄λΌκ³ νλ€.
# νλ μ£Όμ
- μ½λκ° κ°κ²°νμ§λ§ μΈλΆμμ λ³κ²½μ΄ λΆκ°λ₯νκΈ° λλ¬Έμ ν μ€νΈκ° νλ€λ€.(μ€μ)
- DI νλ μμν¬κ° μμΌλ©΄ μ무κ²λ ν μ μλ€.
- κ·Έλ₯ μ¬μ©νμ§ λ§μ. π
@Bean
OrderService orderService(MemberRepository memberRepository, DiscountPolicy discountPolicy){
new OrderServiceImple(memberRepository, discountPolicy) // <----
}
(κ°νΉ μ¬μ©νλ κ²½μ°)
- μ ν리μΌμ΄μ μ μ€μ μ½λμ κ΄κ³μλ ν μ€νΈ μ½λλ₯Ό μμ±ν μ.
- μ€νλ§ μ€μ μ λͺ©μ μΌλ‘ νλ @Configuration κ³Ό κ°μ κ³³μμ νΉλ³ν μ©λλ‘ μ¬μ©
# μΌλ° λ©μλ μ£Όμ
- μΌλ° λ©μλλ₯Ό ν΅ν΄μ μ£Όμ λ°λλ€.
- ν λ²μ μ¬λ¬ νλλ₯Ό μ£Όμ λ°μ μ μλ€.
@Autowired
public void init(MemberRepository memberRepository, DiscountPolicy discountPolicy){
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
(μ°Έκ³ ) μμ‘΄κ΄κ³ μλ μ£Όμ μ μ€νλ§ μ»¨ν μ΄λκ° κ΄λ¦¬νλ μ€νλ§ λΉμ΄μ΄μΌμ§λ§ λμνλ©°, μ€νλ§ λΉμ΄ μλ Member μ κ°μ ν΄λμ€μμ @Autowired μ½λλ₯Ό μ μ©νλ€κ³ ν μ§λΌλ μλ¬΄λ° λμμ μννμ§ μλλ€.
# μ΅μ μ²λ¦¬
- μ£Όμ ν μ€νλ§ λΉμ΄ μλ κ²½μ°μλ λμμ ν΄μΌ νλ κ²½μ°
- @Autowired λ§ μ¬μ©νλ©΄ required option μ default κ° true λΌμ μλμ£Όμ λμμ΄ μλ κ²½μ°μλ μ€λ₯κ° λ°μνλ€.
- μ΄μ μλ μ£Όμ λμμμ΅μ μΌλ‘ μ²λ¦¬νλ λ°©λ²μ μλμ κ°λ€.
(1) @Autowired(required=false) : μλ μ£Όμ ν λμμ΄ μμΌλ©΄ μμ μ λ©μλ μμ²΄κ° νΈμΆμ΄ μλλλ‘ ν¨
(2) org.springframework.lang.@Nullable : μλμ£Όμ ν λμμ΄ μμΌλ©΄ null μ΄ μ λ ₯λ¨
(3) Optional<> : μλ μ£Όμ ν λμμ΄ μμΌλ©΄ Optional.empty κ° μ λ ₯λ¨.
public class AutowiredTest {
@Test
void AutowiredOption(){
ApplicationContext ac = new AnnotationConfigApplicationContext(TestBean.class);
}
static class TestBean{
@Autowired(required = false)
public void setNoBean1(Member noBean1){
// μ€νλ§μ΄ κ΄λ¦¬νκ³ μμ§ μμ λΉμΈ Member
System.out.println("noBean1 = " + noBean1);
}
@Autowired
public void setNoBean2(@Nullable Member noBean2){
// μ€νλ§μ΄ κ΄λ¦¬νκ³ μμ§ μμ λΉμΈ Member
System.out.println("noBean2 = " + noBean2);
}
@Autowired
public void setNoBean3(Optional<Member> noBean3){
System.out.println("noBean3 = " + noBean3);
}
}
}
noBean2 = null
noBean3 = Optional.empty
- μ ν μ€νΈ μ½λμμ Member λ μ€νλ§ λΉμ΄ μλλ€.
- setNoBean1() μ κ²½μ° @Autowired μ μ΅μ μ΄ (required=false) μ΄λ―λ‘ ν΄λΉ λ©μλμ νΈμΆ μμ²΄κ° μλλ€.
# μμ±μ μ£Όμ μ μ¬μ©ν΄μΌ νλ μ΄μ
[λΆλ³μ±]
- λλΆλΆμ μμ‘΄κ΄κ³λ νλ² μ€μ λλ©΄ μ ν리μΌμ΄μ μ’ λ£ μμ κΉμ§ μμ‘΄κ΄κ³κ° λ³κ²½ν΄μΌ ν μ΄μ κ° μλ€. λ³κ²½λμ§ μμμΌ μ’λ€.
- μμ μ μ£Όμ μ μ¬μ©νλ©΄ setter μ public μΌλ‘ μ΄μ΄λμ΄μΌ νλ€. μ΄λ λκ΅°κ°μ μν΄ μμ‘΄κ΄κ³κ° λ³κ²½λ μ μκΈ° λλ¬Έμ μννλ€. μμ±μ μ£Όμ μ κ°μ²΄ μμ± μ λ¨ 1λ²λ§ νΈμΆλκΈ° λλ¬Έμ λΆλ³νλ€.
[λλ½]
- νλ μμν¬ μμ΄ μμν μλ° μ½λλ₯Ό λ¨μ ν μ€νΈν μ μλ€.
class OrderServiceImplTest {
@Test
void createOrder(){
MemoryMemberRepository memberRepository = new MemoryMemberRepository();
memberRepository.save(new Member(1L, "name", Grade.VIP));
OrderServiceImpl orderService = new OrderServiceImpl(memberRepository,new FixDiscountPolicy());
Order order = orderService.createOrder(1L, "itemA", 10000);
Assertions.assertThat(order.getDiscountPrice()).isEqualTo(1000);
}
}
[final ν€μλμ μ¬μ© κ°λ₯]
- μμ±μ μ£Όμ μ μ¬μ©νλ©΄ ννΈμ final ν€μλλ₯Ό μ¬μ©ν μ μλ€.
- final ν€μλλ₯Ό μ¬μ©ν μ, μ΄κΈ°κ°μ μ€μ νμ§ μμΌλ©΄ μμ±μ μμλ§ κ°μ λ£μ΄μ£Όμ΄μΌ νλ©°, final ν€μλλ₯Ό μ¬μ©νμ§λ§ κ°μ΄ λ€μ΄κ°μ§ μμΌλ©΄ μ»΄νμΌ μ€λ₯κ° λ°μνλ€.
- μμ±μμμ κ°μ΄ μ€μ λμ§ μλλΌλ μ»΄νμΌ μ€λ₯κ° λ°μν΄μ μμ νλ€.
(μ°Έκ³ ) μμ μ μ£Όμ μ ν¬ν¨νμ¬ λλ¨Έμ§ μ£Όμ λ°©μλ€μ λͺ¨λ μμ±μ μ΄νμ νΈμΆλκΈ° λλ¬Έμ νλμ final ν€μλλ₯Ό μ¬μ©ν μ μκ³ μμ±μ μ£Όμ λ°©μλ§ fianl ν€μλλ₯Ό μ¬μ©ν μ μλ€.
[μ 리]
- μμ±μ μ£Όμ λ°©μμ νλ μμν¬μ μμ‘΄νμ§ μκ³ μμν μλ° μΈμ΄μ νΉμ§μ μ μ΄λ¦¬λ λ°©λ²μ΄λ€.
- κΈ°λ³Έμ μΌλ‘ μμ±μ μ£Όμ μ μ¬μ©νλ κ²μ΄ μ’κ³ , νμ κ°μ΄ μλ κ²½μ°μλ μμ μ μ£Όμ λ°©μμ μ΅μ μΌλ‘ λΆμ¬νλ©΄ λλ€. μ΄μ κ°μ΄ μμ±μ μ£Όμ κ³Ό μμ μ μ£Όμ μ λμμ μ¬μ©ν μ μλ€.
- νμ μμ±μ μ£Όμ μ μ°μ μ μΌλ‘ μ ννλ κ²μ΄ μ’μΌλ©°, μμ μ μ£Όμ μ μ΅μ μΌλ‘ νμ μμ μ ννλλ‘ νμ. νλ μ£Όμ μ μ¬μ©νμ§ λ§μ.
# 둬볡과 μ΅μ νΈλ λ
- κ°λ°μ μ§ννλ€ λ³΄λ©΄ λλΆλΆμ κ²½μ°μ λ€ λΆλ³μ΄κ³ μ΄λ¬ν κ²½μ°μλνλμ final ν€μλλ₯Ό μ¬μ©νλ€. μ΄λ¬λ©΄ μμ±μλ λ§λ€μ΄μΌ νκ³ , μ£Όμ λ°μ κ°μ λμ νλ μ½λλ₯Ό λ°λ‘ μμ±ν΄μΌ νλ λ± μ½λμ μμ΄ λ§μμ§λλ°, μ΄λ₯Ό νΈλ¦¬νκ² μνν μ μλ λ°©λ²μ΄ μλ€. μλ μ½λλ₯Ό μ΅μ νν΄λ³΄μ.
@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;
}
}
λ¨Όμ , μμ±μκ° νλλ°μ μμΌλ―λ‘ @Autowired λ₯Ό μλ΅ν μ μλ€.
@Component
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
public OrderServiceImpl(MemberRepository memberRepository, DiscountPolicy discountPolicy) {
this.memberRepository = memberRepository;
this.discountPolicy = discountPolicy;
}
}
- κ·Έλ¦¬κ³ μ΄μ 둬볡 λΌμ΄λΈλ¬λ¦¬λ₯Ό μ μ©ν΄λ³΄μ.
- 둬볡 λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄ @RequiredArgsConstructor μ ν΅ν΄μ fianl μ΄ λΆμ νλλ€μ λͺ¨λ λͺ¨μμ μμ±μλ₯Ό μλμΌλ‘ λ§λ€μ΄μ€λ€. κ·Έλ¬λ©΄ μλμ κ°μ΄ κ°μνν μ μλ€.
@Component
@RequiredArgsConstructor
public class OrderServiceImpl implements OrderService{
private final MemberRepository memberRepository;
private final DiscountPolicy discountPolicy;
}
lombok μ΄ μλ°μ μ λ Έν μ΄μ νλ‘μΈμ κΈ°λ₯μ μ¬μ©νμ¬ μ»΄νμΌ μμ μ μμ±μ μ½λλ₯Ό μλμΌλ‘ μμ±ν΄μ€λ€. π²
[μ 리]
μ΅κ·Όμλ μμ±μλ₯Ό λ¨ νλλ§ λ§λ€κ³ @Autowired λ₯Ό μλ΅νλ λ°©λ²μ μ£Όλ‘ μ¬μ©νλλ°, Lombok λΌμ΄λΈλ¬λ¦¬μ @RequiredArgsConstructor μ κ°μ΄ μ¬μ©νμ¬ μ½λλ₯Ό κΉλνκ² κ΅¬νν μ μλ€.
# μ‘°ν λΉμ΄ 2κ° μ΄μμΈ κ²½μ° π€¨
@Autowired λ Type μΌλ‘ μ‘°νλ₯Ό μννλ€.
κ·Έλ¬λ©΄ @Autowired private DiscountPolicy discountPolicy λΌκ³ νλ©΄,
ac.getBean(DiscountPolicy.class) μ κ°μ΄ μ μ¬νκ² λμνλ€.
κ·Έλ°λ°, Type μΌλ‘ λΉμ μ‘°ννλ©΄ μ νλλ λΉμ΄ 2κ° μ΄μμΈ κ²½μ°κ° λ°μν μ μκ³ μ΄λ¬ν κ²½μ°μλ λ¬Έμ κ° λλ€. DiscountPolicy μ νμ νμ μΈ FixDiscountPolicy, RateDiscountPolicy κ° λ λ€ μ€νλ§ λΉμΌλ‘ μ μΈλμ΄ μμ λ,
@Autowired private DiscountPolicy discountPolicy μ κ°μ΄ μμ‘΄κ΄κ³ μλ μ£Όμ μ μ€ννλ©΄
available: expected single matching bean but found 2: fixDiscountPolicy,rateDiscountPolicy
μ κ°μ NoUniqueBeanDefinitionException μ€λ₯κ° λ°μνλ€. μ¬μ€, νμνμ μΌλ‘ μ§μ νμ¬ ν΄κ²°ν μ μμ§λ§ μ΄λ DIP λ₯Ό μλ°°νκ³ νλ‘κ·Έλ¨μ μ μ°μ±μ λ¨μ΄λ¨λ¦°λ€. νΉμ μ΄λ¦λ§ λ€λ₯΄κ³ μμ ν κ°μ νμ μ μ€νλ§λΉμ΄ 2κ° μλ κ²½μ°λ ν΄κ²°ν μ μμ κ²μ΄λ€. μ€νλ§ λΉμ μλμΌλ‘ λ±λ‘ν΄μ λ¬Έμ λ₯Ό ν΄κ²°ν μ λ μκ² μ§λ§, μΈμ λ€μν ν΄κ²° λ°©λ²μ΄ μλ€.
- @Autowired νλ λͺ 맀μΉ
- @Qulifier → @Quilifier λΌλ¦¬ λ§€μΉ → λΉ μ΄λ¦ 맀μΉ
- @Primary μ¬μ©
@Autowired νλ λͺ 맀μΉ
@Autowired λ type μΌλ‘ 맀μΉμ μλνλλ°, μ¬λ¬ λΉμ΄ μμΌλ©΄ νλ μ΄λ¦, νλΌλ―Έν° μ΄λ¦μΌλ‘ λΉ μ΄λ¦μ μΆκ°μ μΌλ‘ 맀μΉνλ€. (νμ λ§€μΉ μλλ₯Ό λ¨Όμ νλλ°, λ§€μΉ κ²°κ³Όκ° 2κ° μ΄μμ΄λ©΄ νλ λͺ , νλΌλ―Έν° λͺ μΌλ‘ λΉ μ΄λ¦μ 맀μΉνλ€.)
@Qualifier μ¬μ© (μΆκ° ꡬλΆμ)
μ£Όμ μ μΆκ°μ μΈ λ°©λ²μ μ 곡νλ κ²μ. (λΉ μ΄λ¦ λ³κ²½μ΄ μλ!)
μλ₯Ό λ€μ΄, @Qualifier("mainDiscountPolicy") λΌκ³ μ£Όμ νλ €κ³ νλλ° λͺ»μ°Ύλλ€λ©΄, mainDiscountPolicy λΌλ μ΄λ¦μ μ€νλ§ λΉμ μΆκ°μ μΌλ‘ νμνλ€. μ¦ @Qualifier μ @Qualifier λΌλ¦¬ 맀μΉμ μλνκ³ , λͺ»μ°Ύλλ€λ©΄ λΉ μ΄λ¦μ 맀μΉνλλ° μ¬κΈ°μλ λͺ»μ°ΎμΌλ©΄ NoSuchBeanDefinitionException μμΈλ₯Ό λ°μμν¨λ€.
@Primary μ¬μ© (μ°μ μμ μ νκΈ°)
@Autowired μν μ μ¬λ¬ κ°μ λΉμ΄ 맀μΉλλ©΄ @Primary κ° μ°μ κΆμ κ°μ§λ€.
Primary, Qualifier μ νμ©
μλ₯Ό λ€μ΄ μ½λμμ λ©μΈμΌλ‘ μ¬μ©νλ λ°μ΄ν°λ² μ΄μ€κ° μκ³ , μλΈ λ°μ΄ν°λ² μ΄μ€κ° μλ€κ³ κ°μ ν΄λ³΄μ. λ©μΈ λ°μ΄ν°λ² μ΄μ€μμ 컀λ₯μ μ μ»λ μ€νλ§ λΉμ @Primary λ₯Ό μ μ©νμ¬ @Qualifier μμ΄ λν΄νΈμ²λΌ μ‘°νν μ μλλ‘ νκ³ , μλΈ λ°μ΄ν°λ² μ΄μ€ 컀λ₯μ λΉμ μ»μ λλ @Qualifier μ μ§μ νμ¬ λͺ μμ μΌλ‘ μ»λ λ°©λ²μΌλ‘ μ½λλ₯Ό κΉλνκ² μμ±ν μ μλ€. μ€νλ§μμ κΈ°λ³Έμ μΌλ‘ μλ보λ€λ μλμ΄, λμ λ²μμ μ νκΆλ³΄λ€λ μ’μ λ²μμ μ νκΆμ΄ μ°μ μμκ° λλ€. κ·Έλμ μ΄ κ²½μ°μμλ λ§μ°¬κ°μ§λ‘ @Qualifier κ° μ°μ κΆμ΄ λ λλ€.
# μ‘°νν λΉμ΄ λͺ¨λ λ€ νμν κ²½μ°
νΉμ νμ μ μ€νλ§ λΉμ΄ λ€ νμν κ²½μ°μλ μ΄λ»κ² λμ²ν κΉ?
package hello.core.autowired;
import hello.core.AutoAppConfig;
import hello.core.discount.DiscountPolicy;
import hello.core.member.Grade;
import hello.core.member.Member;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import java.util.List;
import java.util.Map;
import static org.assertj.core.api.Assertions.assertThat;
public class AllBeanTest {
@Test
void findAllBean(){
AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AutoAppConfig.class, DiscountService.class);
DiscountService discountService = ac.getBean(DiscountService.class);
Member member = new Member(1L, "userA", Grade.VIP);
int discountPrice = discountService.discount(member, 10000, "fixDiscountPolicy");
assertThat(discountService).isInstanceOf(DiscountService.class);
assertThat(discountPrice).isEqualTo(1000);
int rateDiscountPrice = discountService.discount(member, 20000, "rateDiscountPolicy");
assertThat(rateDiscountPrice).isEqualTo(2000);
}
static class DiscountService{
private final Map<String, DiscountPolicy> policyMap;
private final List<DiscountPolicy> policies;
@Autowired
public DiscountService(Map<String, DiscountPolicy> policyMap, List<DiscountPolicy> policies) {
this.policyMap = policyMap;
this.policies = policies;
System.out.println("policyMap = " + policyMap);
System.out.println("policies = " + policies);
}
public int discount(Member member, int price, String discountCode) {
DiscountPolicy discountPolicy = policyMap.get(discountCode);
return discountPolicy.discount(member, price);
}
}
}
- DiscountService λ Map μΌλ‘ λͺ¨λ DiscountPolicy λ₯Ό μ£Όμ λ°λλ€. μ κ²½μ°μλ fixDiscountPolicy μ rateDiscountPolicy κ° κ·Έ λμμ΄λ€.
- discount() λ©μλμ κΈ°λ₯μ, discountCode μ λ°λΌμ map μμ ν΄λΉνλ μ€νλ§ λΉμ μ°Ύμμ μ€ννλ κ²μ΄λ€.
- Map<String, DiscountPolicy> λ map μ ν€μ μ€νλ§ λΉμ μ΄λ¦μ λ£μ΄μ£Όκ³ , κ·Έ κ°μΌλ‘ DiscountPolicy νμ μΌλ‘ μ‘°νν λͺ¨λ μ€νλ§ λΉμ λ΄μμ€λ€.
- List<DiscountPolicy> λ DiscountPolicy νμ μΌλ‘ μ‘°νν λͺ¨λ μ€νλ§ λΉμ λ΄μμ€λ€.
- λ§μ½μ ν΄λΉνλ νμ μ μ€νλ§ λΉμ΄ μμΌλ©΄ λΉ Collection μ΄λ Map μ μ£Όμ νλ€.
# μλ, μλ μμ‘΄κ΄κ³ μ£Όμ μ μ¬λ°λ₯Έ μ€λ¬΄ μ΄μ κΈ°μ€
- μλ κΈ°λ₯μ κΈ°λ³ΈμΌλ‘ μ¬μ©νμ.
- μ§μ λ±λ‘νλ κΈ°μ μ§μ κ°μ²΄λ μλμΌλ‘ λ±λ‘νμ.
- λ€νμ±μ μ κ·Ή νμ©νλ λΉμ¦λμ€ λ‘μ§μ μλ λ±λ‘μ κ³ λ―Όνμ.
Reference
'π» Study ! > Spring' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
μΈν 리μ μ΄μμ κ°μκΈ° μ€νλ§ νλ‘μ νΈμ λΉ¨κ°μ€μ΄ λ무νλ€λ©΄?! (0) | 2023.08.05 |
---|---|
JSP MVC ν¨ν΄ (0) | 2023.05.14 |
[Spring] λΉ μλͺ μ£ΌκΈ° μ½λ°±, λΉ μ€μ½ν (0) | 2023.01.18 |
[Spring] μ±κΈν€ 컨ν μ΄λ (0) | 2023.01.12 |
[Spring] Spring κ³Ό OOP (0) | 2023.01.04 |