我仿照spring的注释方法,给controller层和model层加了注释,功能已经实现了,但在加载model层时,需要获取ActiveRecordPlugin的configName值(目前通过修改源代码,增加get方法,已经获取到),希望作者能提供configName加get方法;另外我觉得注释的方法很好,核心代码如下,如果对作者有所帮助,不甚荣幸。核心代码如下:
/**
* 控制层注解
* @author amox
*
*/
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Ctrl {
/**
* 控制器名称
* @return
*/
String value() default "";
/**
* 视图对应的路径
* @return
*/
String path() default "";
}
/**
* 模型层注解
* @author amox
*
*/
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE})
public @interface Model {
/**
* 表名
* @return
*/
String table() default "";
/**
* 主键名称
* @return
*/
String priKey() default "";
/**
* 数据源配置名
* @return
*/
String dsConfig() default DbKit.MAIN_CONFIG_NAME;
}
/**
* 加载控制器
* @param me 路由
* @param pack 包路径
*/
public void loadCtrl(Routes me, String pack) {
Set<Class<?>> clazzes = ClassKit.getClassesByAnnotation(pack, Ctrl.class);
for(Class<?> clazz : clazzes) {
if(clazz.isAnnotationPresent(Ctrl.class)) {
Ctrl ctrl = clazz.getAnnotation(Ctrl.class);
String key = ctrl.value();
if(null == key || "".equals(key.trim())) {
logger.warn(clazz.getName() + "注解对应的控制器名称未配置,默认以类名配置!");
key = clazz.getSimpleName();
}
me.add(key.trim(), (Class<? extends Controller>) clazz, null == ctrl.path() ? "":ctrl.path().trim());
}
}
}
/**
* 加载对象模型
* @param me
* @param pack
*/
public void loadModel(ActiveRecordPlugin me, String pack) {
Set<Class<?>> clazzes = ClassKit.getClassesByAnnotation(pack, Model.class);
for(Class<?> clazz : clazzes) {
if(clazz.isAnnotationPresent(Model.class)) {
Model ctrl = clazz.getAnnotation(Model.class);
if(null == ctrl.table() || "".equals(ctrl.table().trim())) {
logger.warn(clazz.getName() + "注解对应的数据库名称未配置,加载跳过!");
return;
}
String priKey = ctrl.priKey();
if(null == priKey || "".equals(priKey.trim())) {
if(ctrl.dsConfig().trim().equals(me.getConfigName())) {
me.addMapping(ctrl.table().trim(), (Class<? extends com.jfinal.plugin.activerecord.Model<?> >) clazz);
}
} else {
if(ctrl.dsConfig().trim().equals(me.getConfigName())) {
me.addMapping(ctrl.table().trim(), priKey.trim(), (Class<? extends com.jfinal.plugin.activerecord.Model<?> >) clazz);
}
}
}
}
}
在引导配置如下: