2017-03-29 6 views
1

run() 메서드를 포함하는 추상 클래스와 다른 구현 클래스로 run 메서드를 재정의하는 자식 클래스가 거의 없습니다. 커스텀 어노테이션 클래스도 있습니다. 각각의 자식 클래스는이 애노테이션을 각 자식 클래스를 구별하는 다른 값으로 가지고 있습니다. 자식 클래스 이름을 사용하지 않고 이러한 주석을 사용하여 추상 클래스 객체에서 각 하위 클래스에 대해이 실행 메소드를 호출했습니다. 가능하거나 다른 방법으로이 작업을 수행 할 수 있습니까?커스텀 어노테이션을 사용하여 추상 클래스에서 특정 자식 메서드 호출하기

코드는 여기 -------

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.TYPE) 
public @interface CustomAnno { 
    public String name(); 
} 

public abstract class AbstractClass { 

    abstract void run(); 

} 

@CustomAnno(name="one") 
public class ExtendingClassOne extends AbstractClass { 

    @Override 
    void run() { 
     System.out.println("class one extending"); 

    } 

} 

@CustomAnno(name="two") 
public class ExtendingClassTwo extends AbstractClass { 

    @Override 
    void run() { 
     System.out.println("class two extending"); 

    } 

} 

그래서 자식 클래스 이름을 사용하지 않고 각 자식 클래스의 방법을 실행 호출 할 수 있습니다, "하나"와 "이"추상 클래스와 주석 값을 갖는 .

+0

귀하의 질문을 완전히 이해하지 못했습니다. 그러나 당신은 이것과 같은 것을 기대합니까? 'AbstractClass child1 = \\ ExtendingClassOne의 인스턴스; child1.run(); AbstractClass child2 = \\ ExtendingClassTwo의 인스턴스; child2.run();'예제를 제공 할 수 있습니까? – prasanth

+0

답장을 보내 주셔서 감사합니다. 여기 자식 클래스의 run 메소드를 호출하기 위해 우리는 그것의 Object로 초기화해야한다. 주석과 Abstract 클래스만을 사용하여 하위 클래스를 호출하려고합니다. 우리는 런타임에 모든 주석을 하위 클래스와 함께로드 할 수 있습니다. 너 지금 받았니? –

+0

예. 내가 이해할 수. – prasanth

답변

2

ClassPathScanningCandidateComponentProvider 스프링 라이브러리를 사용하여 특정 종류의 주석을 사용하는 모든 클래스를 나열 할 수 있습니다. 여기서 주석은 사용자 정의 또는 기본값 일 수 있습니다. 따라서 추상 클래스를 확장하는 모든 하위 클래스에 주석을 추가하면 해당 하위 클래스의 목록 만 제공 할 수 있습니다. 이것은 내 문제를 해결했다.

관련 문제