Can you find all classes in a package using reflection?

前端 未结 27 2277
不知归路
不知归路 2020-11-21 05:24

Is it possible to find all classes or interfaces in a given package? (Quickly looking at e.g. Package, it would seem like no.)

27条回答
  •  眼角桃花
    2020-11-21 06:09

    Yeah using few API's you can, here is how I like doing it, faced this problem which I was using hibernate core & had to find classes which where annotated with a certain annotation.

    Make these an custom annotation using which you will mark which classes you want to be picked up.

    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 EntityToBeScanned {
    
    }
    

    Then mark your class with it like

    @EntityToBeScanned 
    public MyClass{
    
    }
    

    Make this utility class which has the following method

    public class ClassScanner {
    
        public static Set> allFoundClassesAnnotatedWithEntityToBeScanned(){
            Reflections reflections = new Reflections(".*");
            Set> annotated = reflections.getTypesAnnotatedWith(EntityToBeScanned.class);
            return annotated;
        }
    
    }
    

    Call the allFoundClassesAnnotatedWithEntityToBeScanned() method to get a Set of Classes found.

    You will need libs given below

    
        
            com.google.guava
            guava
            21.0
        
    
    
        org.javassist
        javassist
        3.22.0-CR1
    
    
    
        org.reflections
        reflections
        0.9.10
    
    

提交回复
热议问题