package org.framework.helper;
//~--- non-JDK imports --------------------------------------------------------
import org.framework.annotation.Controller;
import org.framework.annotation.Service;
import org.framework.util.ClassUtil;
//~--- JDK imports ------------------------------------------------------------
import java.lang.annotation.Annotation;
import java.util.HashSet;
import java.util.Set;
/**
* 类操作助手类
* Created by lizhaoz on 2015/12/16.
*/
public final class ClassHelper {
// 存放所有加载的类
private static final Set<Class<?>> CLASS_SET;
static {
// 静态块中初始化 CLASS_SET
String basePackage = ConfigHelper.getAppBasePackage();
CLASS_SET = ClassUtil.getClassSet(basePackage);
}
/**
* author:Lizhao
* Date:15/12/16
* version:1.0
*
* @return
*/
public static Set<Class<?>> getClassSet() {
return CLASS_SET;
}
/**
* 得到有Service注解的类
* author:Lizhao
* Date:15/12/16
* version:1.0
*
* @return
*/
public static Set<Class<?>> getServiceClassSet() {
Set<Class<?>> classSet = new HashSet<Class<?>>();
for (Class<?> cls : CLASS_SET) {
if (cls.isAnnotationPresent(Service.class)) {
classSet.add(cls);
}
}
return classSet;
}
/**
* 得到有Controller注解的类
* author:Lizhao
* Date:15/12/16
* version:1.0
*
* @return
*/
public static Set<Class<?>> getControllerClassSet() {
Set<Class<?>> classSet = new HashSet<Class<?>>();
for (Class<?> cls : CLASS_SET) {
if (cls.isAnnotationPresent(Controller.class)) {
classSet.add(cls);
}
}
return classSet;
}
/**
* 得到所有Bean类 包括Service 和Controller
* author:Lizhao
* Date:15/12/16
* version:1.0
*
* @return
*/
public static Set<Class<?>> getBeanClassSet() {
Set<Class<?>> beanClassSet = new HashSet<Class<?>>();
beanClassSet.addAll(getServiceClassSet());
beanClassSet.addAll(getControllerClassSet());
return beanClassSet;
}
/**
* 获取某个类下面的所有子类
* author:Lizhao
* Date:15/12/20
* version:1.0
*
* @param superClass
*
* @return
*/
public static Set<Class<?>> getClassSetBySuper(Class<?> superClass) {
Set<Class<?>> classSet = new HashSet<Class<?>>();
for (Class<?> cls : CLASS_SET) {
if (superClass.isAssignableFrom(cls) &&!superClass.equals(cls)) {
classSet.add(cls);
}
}
return classSet;
}
/**
* 获取应用包名下带有某个注解的所有类
* author:Lizhao
* Date:15/12/20
* version:1.0
*
* @param annotationClass
*
* @return
*/
public static Set<Class<?>> getClassSetByAnnotation(Class<? extends Annotation> annotationClass) {
Set<Class<?>> classSet = new HashSet<Class<?>>();
for (Class<?> cls : CLASS_SET) {
if (cls.isAnnotationPresent(annotationClass)) {
classSet.add(cls);
}
}
return classSet;
}
}
//~ Formatted by Jindent --- http://www.jindent.com