获取类
Controller,Service类是框架需要管理的类,把他们统称为Bean类。实现一个类可以获取应用所有的Controller,Service类。首先调用ConfigHelper.getAppBasePackage()获取基础包名,然后调用ClassUtil.getClasses(basePackage)加载该基础包名下所有的类,保存在变量ArrayList
//获取类
public class ClassHelper {
//基础包名下所有的类
private static final ArrayList<Class<?>> classes;
static {
String basePackage = ConfigHelper.getAppBasePackage();
classes = ClassUtil.getClasses(basePackage);
}
/**
* 获取基础包名下所有的类
*
* @return
*/
public static ArrayList<Class<?>> getClasses() {
return classes;
}
/**
* 获取所有Service类
*
* @return
*/
public static ArrayList<Class<?>> getServiceClasses() {
ArrayList<Class<?>> sc = new ArrayList<>();
//补全代码
return sc;
}
/**
* 获取所有Controller类
*
* @return
*/
public static ArrayList<Class<?>> getControllerClasses() {
ArrayList<Class<?>> cc = new ArrayList<>();
for (Class<?> c : classes) {
if (c.isAnnotationPresent(Controller.class)) {
cc.add(c);
}
}
return cc;
}
/**
* 框架Bean容器主要管理Service,Controller类
*
* @return
*/
public static ArrayList<Class<?>> getBeanClasses() {
ArrayList<Class<?>> bc = new ArrayList<>();
bc.addAll(getServiceClasses());
bc.addAll(getControllerClasses());
return bc;
}
}
现在来测试类加载器和获取类是否正确,配置文件将基础包名设为app.base_package=com.hubwiz.web.controller,在这个包下,实现了三个类HomeController类(带Controller注解),PersonService类(带Service注解),Person类。
public static void main(String[] args) {
ArrayList<Class<?>> ces = ClassHelper.getClasses();
for (Class<?> c : ces) {
System.out.println(c.getSimpleName());
}
}
输出结果:
在com.hubwiz.web.helper.ClassHelper,实现获取所有带有Service注解的类。