public static Set<Class> listAnnotatedClasses(Class<? extends Annotation> annotation) {
		Set<Class> classes = new HashSet<Class>();
		try {
			Enumeration<URL> e = ClassLoader.getSystemClassLoader().getResources("");
			while (e.hasMoreElements()) {
				URL url = e.nextElement();
				for (String child : Classes.getChildren(url)) {
					if (child.endsWith(".class")) {
						String className = child.substring(0, child.length() - 6).replace("/", ".");
						Class<?> clazz = Class.forName(className);

						if (clazz.getAnnotation(annotation) != null) {
							classes.add(Class.forName(clazz.getName()));
						}
					}
				}
			}
		} catch (Exception e) {
			throw new RuntimeException(e);
		}
		return classes;
	}