μΆμ²
https://inf.run/XKQg
μ΄λ
Έν
μ΄μ
μ ν΄λμ€, λ©μλ, νλ λ° λ§€κ°λ³μμ κ°μ μ½λ μμμ μΆκ°ν μ μλ λ©ν λ°μ΄ν°μ ννμ΄λ©°, @
λ‘ μμνκ³ κ·Έ λ€μ μ΄λ
Έν
μ΄μ
μ΄λ¦μ΄ μλ€.
μ΄λ
Έν
μ΄μ
μ μ½λμ λν μΆκ° μ 보λ₯Ό μ 곡νλ©° λ°λ³΅μ μΈ μ½λλ₯Ό μμ±νμ§ μμλ λλ€.
λν, λ°νμμ μ½λμ λμμ μ§μ μ μΈ μν₯μ μ£Όμ§ μμΌλ©°, λ€μν ν΄κ³Ό νλ μμν¬μμ ν΅ν©μ κ°μ ν μ μλ€.
μμλ‘ μ€νλ§ μ΄λ
Έν
μ΄μ
μ λν΄ μ€λͺ
νκ³ μ νλ€.
μ€νλ§ μ΄λ
Έν
μ΄μ
μλ @Configuration
, @Bean
, @Component
, @Autowired
λ±μ λ§μ μ΄λ
Έν
μ΄μ
μ΄ μλ€.
μ€νλ§ μ΄λ Έν μ΄μ μ μ¬μ©νλ©΄ κ°λ° νλ‘μΈμ€λ₯Ό κ°μννκ³ μ½λ κ°λ μ±μ λμ΄λ©° 보μΌλ¬νλ μ΄νΈ configurationμ μ€μ¬μ£Όλ μ΄μ μ΄ μλ€.
@Autowired
μ κ°μ μ΄λ
Έν
μ΄μ
μ μ¬μ©ν¨μ λ°λΌ μλμΌλ‘ DI μ½λλ₯Ό μμ±ν νμ μμ΄ Springμ΄ μλμΌλ‘ νμν κ³³μ DIλ₯Ό ν΄μ€λ€.μλ°μμ 컀μ€ν μ΄λ Έν μ΄μ μ ν΄λμ€, λ©μλ, νλμ κ°μ λ€μν νλ‘κ·Έλ¨ μμμ μ μ©ν μ μλ μ¬μ©μ μ μ λ©νλ°μ΄ν° λ§μ»€μ΄λ€.
μ»΄νμΌ νμ λλ λ°νμμ ν΄κ³Ό νλ μμν¬μ μ½λμ λν μ 보λ₯Ό μ 곡ν μ μλ€.
컀μ€ν
μ΄λ
Έν
μ΄μ
μ μλ°μ κΈ°λ³Έ μ 곡 μ΄λ
Έν
μ΄μ
(e.g. @Override
, Deprecated
, SuppressWarnings
)κ³Ό μ μ¬ν λ°©μμΌλ‘ μλνμ§λ§, κ°λ°μλ νΉμ μꡬ μ¬νμ λ§κ² μ΄λ
Έν
μ΄μ
μ μ μν μ μλ€.
λ©ν λ°μ΄ν°λ ꡬν μΈλΆ μ¬νμ μμΈν μ΄ν΄λ³΄μ§ μκ³ λ μ½λμ λͺ©μ , λμ, μ μ½μ‘°κ±΄μ μ΄ν΄νλλ° λμμ΄ λλ―λ‘ μ½λ κ°λ μ±κ³Ό μ μ§ λ³΄μμ±μ κ°μ νκ³ μ€λ₯ λ°μ κ°λ₯μ±μ μ€μ¬μ€λ€.
컀μ€ν μ΄λ Έν μ΄μ μ μ½λμ λ©ν λ°μ΄ν°λ₯Ό μΆκ°νλλ° μ€μν μν μ νλ€.
@Animal(name= "FuBao", birth_date="2020-07-20")
public class Zoo{
}
@Animal
λΌλ 컀μ€ν
μ΄λ
Έν
μ΄μ
μ λ§λ€μ΄μ Zoo
ν΄λμ€μ μ μ©νλ©΄, λλ¬Ό μ΄λ¦κ³Ό νμ΄λ λ μ§μ λν λ©ν λ°μ΄ν°λ₯Ό μ 곡νλ€.
μ΄ μ½λλ₯Ό μ½μ μ¬λμ μ 보λ₯Ό λΉ λ₯΄κ² μμ§νμ¬ μ½λ λ² μ΄μ€μ λν μ΄ν΄λ₯Ό λμΌ μ μλ€.
@interface
ν€μλ λ€μ μ΄λ
Έν
μ΄μ
μ΄λ¦μ μ λλ€.
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface MyCustomAnnotation {
String value() default "xxx";
int count() default 1;
}
@Retention(RetentionPolicy.RUNTIME): 리νλ μ
μ ν΅ν΄ λ°νμμ μ΄λ
Έν
μ΄μ
μ μ¬μ©ν μ μλλ‘ λ³΄μ₯νλ€.
@Target(ElementType.METHOD): ν΄λΉ 컀μ€ν
μ΄λ
Έν
μ΄μ
μ λ©μλμ μ μ©ν μ μλλ‘ μ§μ νλ€.
컀μ€ν μ΄λ Έν μ΄μ λ΄μμ elementsμ attributesλ₯Ό μΆκ°ν μ μλ€.
String value() default "Default Value";
λ κΈ°λ³Έκ°μ΄ βxxxβμΈ valueλΌλ μ΄λ¦μ μ΄λ
Έν
μ΄μ
λ©€λ²μ int count() default 1;
λ κΈ°λ³Έκ°μ΄ 1μΈ countλΌλ μ΄λ¦μ μ΄λ
Έν
μ΄μ
λ©€λ²λ₯Ό μ μν κ²μ΄λ€.
μ μκ° μλ£λλ©΄ 컀μ€ν μ΄λ Έν μ΄μ μ λ©μλλ ν΄λμ€μ μ¬μ©ν μ μκ² λλ€.
public class MyService {
@MyCustomAnnotation(value = "book", count = 5)
public void customMethod() {
// Method implementation
}
}
@MyCustomAnnotation
μ valueμλ βbookβ, countμλ 5λΌλ κ°μ μ§μ νκ³ ν΄λΉ μ΄λ
Έν
μ΄μ
μ μ¬μ©νλ©΄, λ°νμ μμ μ μ΄λ
Έν
μ΄μ
μ 보λ₯Ό μ½μ μ μκ² λλ€.
π μ°Έκ³ μλ£
Why use Spring AnnotationsΒ ?
Custom Spring Annotations, How To And Why?