该插件暂支持JFinal框架Model对象和Controller对象注解注入
1.控制器注解注入(在继承JFinal框架的Controller的子类上加上注解标签@JFinalController)
@JFinalController({"/", "/hello"})
public class HelloController extends Controller {
public void index() {
User user = User.dao.findById("1500453530921");
renderHtml("id:" + user.getId() + "<br/>" + "name:" + user.getName() + "<br/>" + "age:" + user.getAge());
}
}
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface JFinalController {
String[] value();//访问某个 Controller 所需要的一个字符,相当于controllerKey,可定义多个
String module() default "";//所属模块,适用于路由拆分
String viewPath() default "controllerKey";//该 Controller 返回的视图的相对路径
}
2.在JFinal的配置类的路由配置上注册该标签(注入方式:二选一)
public class JFinalBaseConfig extends JFinalConfig {
.....
/**
* 路由配置
* @param routes
*/
public void configRoute(Routes routes) {
System.out.println("configRoute");
//获取控制器注解注入对象
ControllerAnnotation controllerAnnotation = new ControllerAnnotation(scanControllerPackage);
//第一种注入方式(直接传入路由对象,路径统一配置(适合单路由))
controllerAnnotation.injectController(routes);
//第二种注入方式(直接传入回调接口,路径配置(适合拆分路由))
controllerAnnotation.injectController(new IControllerScanReport() {
/**
*
* @param controllerKey 访问某个 Controller 所需要的一个字符,相当于controllerKey,可定义多个
* @param controllerClass 控制器Class
* @param module 所属模块,适用于路由拆分,默认“”
*/
public void report(String controllerKey, Class<?> controllerClass, String module) {
//do something
}
/**
*
* @param controllerKey 访问某个 Controller 所需要的一个字符,相当于controllerKey,可定义多个
* @param controllerClass 控制器Class
* @param viewPath 该 Controller 返回的视图的相对路径,默认“controllerKey”
* @param module 所属模块,适用于路由拆分,默认“”
*/
public void report(String controllerKey, Class<?> controllerClass, String viewPath, String module) {
//do something
}
});
}
.....
}
1.控制器注解注入(在继承JFinal框架的Model的子类上加上注解标签@JFinalModel)
//使用例子
@JFinalModel(tableName = "user")
public class User extends Model<User> {
}
//标签类
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface JFinalModel {
String tableName(); //数据库表名
String primaryKey() default "id"; //主键名称,默认为“id”
}
2.在JFinal的配置类的插件配置方法上注册该标签(注入方式:二选一;注:注解注入插件必须在ActiveRecordPlugin插件之前添加)
public class JFinalBaseConfig extends JFinalConfig {
.....
/**
* 插件添加配置
* @param plugins
*/
public void configPlugin(Plugins plugins) {
System.out.println("configPlugin");
//连接数据库
DruidPlugin dp = new DruidPlugin("jdbcUrl", "username", "password");
plugins.add(dp);
//建立表和对象映射关系对象
final ActiveRecordPlugin arp = new ActiveRecordPlugin(dp);
//添加表和对象映射关系,扫描@JFinalModel注解(注入方式一:直接传入ActiveRecordPlugin对象实例)
ModelAnnotationPlugin map1 = new ModelAnnotationPlugin(scanModelPackage);
map1.injectModel(arp);
//添加表和对象映射关系,扫描@JFinalModel注解(注入方式二:直接传入ActiveRecordPlugin对象实例)
ModelAnnotationPlugin map2 = new ModelAnnotationPlugin(scanModelPackage);
map2.injectModel(new IModelScanReport() {
public void report(String tableName, String primaryKey, Class<?> modelClass) {
//do something
}
public void report(String tableName, Class<?> modelClass) {
//do something
}
});
//添加插件(注:注解注入插件必须在ActiveRecordPlugin插件之前添加)
plugins.add(map1);
plugins.add(arp);
}
.....
}
<dependency>
<groupId>com.github.yu1234.JFinalPluginExt</groupId>
<artifactId>annotation</artifactId>
<version>1.0.0</version>
</dependency>