[DI Framework] 어노테이션 개발
2022. 1. 18. 13:03ㆍProject/DI Framework
먼저 프레임워크에서 사용할 어노테이션을 개발해보자. 먼저 목록부터 살펴보자.
- @Bean
- @Configuration이 선언된 클래스의 메서드에 적용되며 해당 메서드를 빈으로 등록함을 의미한다.
- @Component
- @ComponentScan으로 탐색되며 해당 클래스를 빈으로 등록함을 의미한다.
- @ComponentScan
- 이 어노테이션이 선언된 클래스의 디렉터리부터 모든 하위 패키지를 순회하며 @Component를 탐색한다.
- @Configuration
- 메서드 방식으로 빈을 등록하기 위해 사용되며, 설정 파일이라는 의미를 담고 있다.
- @Injectable
- 이 어노테이션이 선언된 위치에 따라 빈을 주입함을 의미한다.
개발할 어노테이션들에 대해 살펴보았다. 이제 개발해보도록 한다. 어노테이션 개발은 크게 어렵지 않다.
- @Retention: 해당 어노테이션이 유지되는 기간을 나타낸다. DI를 위해 런타임에서도 어노테이션을 참조해야 하기 때문에 모든 어노테이션에 RetentionPolicy.RUNTIME을 적용했다.
- @Target: 해당 어노테이션이 선언될 수 있는 위치를 나타낸다. METHOD는 메서드에만 적용 가능함을 나타내고, TYPE은 클래스, 인터페이스, 이넘(enum)에 적용 가능함을 나타낸다. 나머지는 이름으로 유추해 낼 수 있으므로 생략한다. 이 외에도 다른 옵션들이 있으니 구글링으로 확인하기 바란다.
package com.wscrg;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Bean {
}
package com.wscrg;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Component {
}
package com.wscrg;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ComponentScan {
}
package com.wscrg;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
@Component
public @interface Configuration {
}
package com.wscrg;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.CONSTRUCTOR, ElementType.FIELD, ElementType.METHOD })
public @interface Injectable {
}
DI를 하기 위한 어노테이션이 준비되었다. 다음에는 DI의 핵심이 되는 IocContainer를 작성한다.
'Project > DI Framework' 카테고리의 다른 글
[DI Framework] 개발 환경 세팅 (0) | 2022.01.18 |
---|---|
[DI Framework] DI 프레임워크 개발 (0) | 2022.01.18 |