I know there are incredible set of tools for loading plugin classes in java, but today an idea came to my mind.
What if I have a bunch of annotated and un-annotated classes in package "org.home.junk" (annotated with annotation "@AnnotatedClass") and those classes have annotated methods with say annotation "@AnnotatedMethod".
First question: can I at run-time get an array/collection of all the classes in that specific package, so that I could check which one's are annotated and create an instance of them. (I am aware however how to check if Some.class has annotations courtesy of this guide: http://isagoksu.com/2009/development/java/creating-custom-annotations-and-making-use-of-them/)
Second question: - If I can do what I'd like in first question - what would be the most political way to do this?
I believe it is possible, as I understand JUnit loads test-case classes in some similar manner.
Also it would be cool if this could be done with minimal third party libraries and such, again - if it's possible :)
First answer: Take a look at this project.
Reflections reflections = new Reflections("org.home.junk");
Set<Class<?>> annotated = reflections.getTypesAnnotatedWith(javax.persistence.Entity.class);
It returns all the classes from org.home.junk
annotated with javax.persistence.Entity
annotation.
Second Answer: To create new instance of above classes you can do this
for (Class<?> clazz : annotated) {
final Object newInstance = clazz.newInstance();
}
Hope this answers everything.