[DI Framework] 어노테이션 개발

2022. 1. 18. 13:03Project/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