Java/Basic

[Java-Basic] Reflection API 편리하게 사용하여 Vert.x Verticle 사용하기

Jeong Jeon
반응형

Vert.x로 데몬을 만들다가  instance, worker 및 poolsize를 설정하는것을 편리하게 Annotation으로 만들때 사용하려고 찾아보다 알게된 내용.

 

언제든지 편하게 사용할 수 있을것 같아 기록..!

 

=>

Reflection API를 편리하게 사용할수 있게 해주는 라이브러리가있다!!!

<dependency>
	<groupId>org.reflections</groupId>
	<artifactId>reflections</artifactId>
	<version>0.9.10</version>
</dependency>

요 라이브러리를 사용하면 아주 편리하게 Annotation에 정해놓은 값들을 꺼내서 사용할 수 있다.

 

아래는 사용부분 코드

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface Verticle {
	boolean isWorker() default true;
    int instance() default 1;
    int poolSize() default 100;
}

Verticle의 worker, instance, poolsize를 설정하는 Annotation을 만들어놓은뒤 아래와 같이 가져와서 사용한다.

final Reflections reflections = new Reflections("com.won.test.verticle");
		final Set<Class<?>> verticles = reflections.getTypesAnnotatedWith(Verticle.class);
		for (Class<?> verticle : verticles) {
			System.out.println("Verticle.class.getName()>> " + Verticle.class.getName());
			Verticle annotation = verticle.getAnnotation(Verticle.class);
			DeploymentOptions deploymentOptions = new DeploymentOptions();
			deploymentOptions.setInstances(annotation.instance());
			deploymentOptions.setWorker(annotation.isWorker());
			deploymentOptions.setWorkerPoolSize(annotation.poolSize());
        }

new Reflections(Custom Annotation Class)로 내가 만든 Custom Annotation을 불러오고,

getTypesAnnotationWith(Verticle.class) 를 통해 해당 어노테이션에 할당 받은 isWorker(), instance(), poolSize()를 가져와서 사용한다.

 

Daemon 만들떄 편하게 사용했다.

Vert.x도 더 공부해서 기록할 예정! 화이팅

반응형