π[Spring] @Qualifier
μ΄λ
Έν
μ΄μ
.
-
@Qualifier
μ΄λ Έν μ΄μ μ Spring Frameworkμμ λΉ μ£Όμ μ λͺ¨νΈμ±μ ν΄κ²°νκΈ° μν΄ μ¬μ©λλ μ΄λ Έν μ΄μ μ λλ€. - Springμ κΈ°λ³Έμ μΌλ‘ νμ μ κΈ°μ€μΌλ‘ λΉμ μ£Όμ νμ§λ§, λμΌν νμ μ λΉμ΄ μ¬λ¬ κ° μ‘΄μ¬ν κ²½μ° μ΄λ λΉμ μ£Όμ ν μ§ λͺ¨νΈμ±μ΄ λ°μν μ μμ΅λλ€.
- μ΄λ
@Qualifier
μ΄λ Έν μ΄μ μ μ¬μ©νμ¬ νΉμ λΉμ λͺ μμ μΌλ‘ μ§μ ν μ μμ΅λλ€.
1οΈβ£ @Qualifier
μ μ£Όμ κΈ°λ₯.
1. λͺ μμ λΉ μ ν.
- μ¬λ¬ κ°μ λμΌν νμ
μ λΉμ΄ μ‘΄μ¬ν λ,
@Qualifier
λ₯Ό μ¬μ©νμ¬ μ΄λ€ λΉμ μ£Όμ ν μ§ λͺ μμ μΌλ‘ μ§μ ν μ μμ΅λλ€.- μ΄λ₯Ό ν΅ν΄ Springμ΄ μ£Όμ ν΄μΌ ν λΉμ λͺ ννκ² κ΅¬λΆν μ μμ΅λλ€.
2. λΉ μ΄λ¦ κΈ°λ° μ£Όμ .
-
@Qualifier
λ λΉμ μ΄λ¦μ κΈ°μ€μΌλ‘ μ£Όμ ν λΉμ μ νν©λλ€.-
@Autowired
μ ν¨κ» μ¬μ©λλ©°, μ΄λ₯Ό ν΅ν΄ Springμ΄ μ΄λ€ λΉμ μ£Όμ ν μ§ κ²°μ ν μ μμ΅λλ€.
-
2οΈβ£ μ¬μ© μμ
1. λμΌν νμ μ μ¬λ¬ λΉμ΄ μμ λ.
@Component
public class FirstService implements MyService {
// FirstService ꡬν
}
@Component
public class SecondService implements MyService {
// SecondService ꡬν
}
- μ μ½λμμ
FirstService
μSecondService
κ° λͺ¨λMyService
νμ μΌλ‘ μ μλ λΉμ λλ€.- μ΄ κ²½μ°
MyService
νμ μ λΉμ μ£Όμ λ°μΌλ € νλ©΄ Springμ΄ μ΄λ λΉμ μ£Όμ ν΄μΌ ν μ§ λͺ¨νΈμ±μ΄ λ°μν©λλ€.
- μ΄ κ²½μ°
2. @Qualifier
λ‘ νΉμ λΉ μ£Όμ
νκΈ°.
@Service
public class MyClient {
private final MyService myService;
@Autowired
public MyClient(@Qualifier("secondService") MyService myService) {
this.myService = myService;
}
public void execute() {
myService.performAction();
}
}
-
μ€λͺ
- μ μ½λμμ
@Qualifier("secondService")
λSecondService
λΉμ λͺ μμ μΌλ‘ μ£Όμ νλλ‘ μ§μ νκ³ μμ΅λλ€. - λ°λΌμ Springμ
SecondService
λΉμ μ£Όμ νκ² λ©λλ€. - λμΌν νμ μ μ¬λ¬ λΉμ΄ μμ λ, μ΄μ κ°μ΄ λͺ μμ μΌλ‘ μ νν μ μμ΅λλ€.
- μ μ½λμμ
3οΈβ£ μ¬μ© μν©.
-
λμΌν νμ
μ λΉμ΄ μ¬λ¬ κ° μμ λ
-
Qualifier
λ μ¬λ¬ κ°μ λμΌν νμ μ λΉμ΄ λ±λ‘λμ΄ μμ λ, μ΄λ λΉμ μ£Όμ ν΄μΌ ν μ§ λͺ νν μ§μ ν΄μΌ νλ κ²½μ°μ μ¬μ©λ©λλ€.
-
-
νΉμ λΉμ μ£Όμ
νκ³ μΆμ λ
- μΌλ°μ μΈ μν©μμ κΈ°λ³Έ λΉμ΄ μλ, νΉμ ν λΉμ μ£Όμ νκ³ μ ν λ μ¬μ©ν μ μμ΅λλ€.
λΉ μ΄λ¦ μ§μ .
- λΉ μ΄λ¦μ λͺ
μμ μΌλ‘ μ§μ νλ €λ©΄,
@Component
λλ@Bean
μ΄λ Έν μ΄μ μ μ΄λ¦μ μ§μ ν μ μμ΅λλ€.
```java
@Component(βfirstServiceβ)
public class FirstService implements MyService {
// ꡬν λ΄μ©
}
@Component(βsecondServiceβ)
public class SecondService implements MyService {
// ꡬν λ΄μ©
}
- μ΄λ κ² λΉμ μ΄λ¦μ λͺ
μμ μΌλ‘ μ€μ ν ν `@Qualifier`λ‘ ν΄λΉ μ΄λ¦μ μ§μ νμ¬ μ£Όμ
ν μ μμ΅λλ€.
## 4οΈβ£ `@Qualifier`μ `@Primary`μ μ°¨μ΄
- **`@Primary`**
- κΈ°λ³Έμ μΌλ‘ μ¬μ©λ λΉμ μ§μ ν©λλ€.
- λμΌν νμ
μ μ¬λ¬ λΉμ΄ μ‘΄μ¬ν λ, `@Primary`κ° μ§μ λ λΉμ΄ μ°μ μ μΌλ‘ μ£Όμ
λ©λλ€.
- λ€λ§, λͺ
μμ μΌλ‘ `@Qualifier`κ° μ¬μ©λλ©΄ `@Primary`λ 무μλ©λλ€.
- **`@Qualifier`**
- νΉμ λΉμ λͺ
μμ μΌλ‘ μ£Όμ
ν λ μ¬μ©λ©λλ€.
- `@Primary`κ° μ€μ λ λΉμ΄ μλλΌλ, `@Qualifier`λ‘ λͺ
μλ λΉμ΄ μ°μ λ©λλ€.
## 5οΈβ£ μμ: `@Primary`μ `@Qualifier` ν¨κ» μ¬μ©.
```java
@Component
@Primary
public class FirstService implements MyService {
// FirstService ꡬν
}
@Component
public class SecondService implements MyService {
// SecondService ꡬν
}
@Service
public class MyClient {
private final MyService myService;
@Autowired
public MyClient(@Qualifier("secondService") MyService myService) {
this.myService = myService;
}
public void execute() {
myService.performAction();
}
}
-
μ€λͺ
- μ¬κΈ°μ
FirstService
λ@Primary
λ‘ κΈ°λ³Έ λΉμΌλ‘ μ€μ λμμ§λ§,@Qualifier("secondService")
λ₯Ό μ¬μ©ν΄SecondService
λΉμ΄ λͺ μμ μΌλ‘ μ£Όμ λ©λλ€. -
@Primary
λ κΈ°λ³Έ λΉμ μ€μ ν λ μ μ©νκ³ ,@Qualifier
λ νΉμ μν©μμ νΉμ λΉμ μ£Όμ ν λ μ¬μ©λ©λλ€.
- μ¬κΈ°μ
6οΈβ£ κ²°λ‘
-
@Qualifier
μ΄λ Έν μ΄μ μ Springμμ λμΌν νμ μ μ¬λ¬ λΉ μ€ νΉμ λΉμ λͺ μμ μΌλ‘ μ£Όμ ν΄μΌ ν λ μ¬μ©λ©λλ€. - μ΄λ₯Ό ν΅ν΄ λΉ μ£Όμ κ³Όμ μμ λ°μν μ μλ λͺ¨νΈμ±μ ν΄κ²°ν μ μμΌλ©°, κ°λ°μκ° μνλ λΉμ λͺ νν μ§μ ν μ μμ΅λλ€.
-
@Primary
μ ν¨κ» μ¬μ©νμ¬ κΈ°λ³Έ λΉκ³Ό νΉμ λΉμ κ΄λ¦¬ν μ μμ΅λλ€.