# JFinalExtPlugin
**Repository Path**: yuqwer/JFinalExtPlugin
## Basic Information
- **Project Name**: JFinalExtPlugin
- **Description**: JFinal框架插件扩展
- **Primary Language**: Java
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 6
- **Forks**: 0
- **Created**: 2017-07-21
- **Last Updated**: 2021-08-06
## Categories & Tags
**Categories**: webframework
**Tags**: None
## README
### JFinalExtPlugin JFinal框架插件扩展
该插件暂支持JFinal框架Model对象和Controller对象注解注入
#### 以下是使用示例:
#### 控制器注解注入
**1.控制器注解注入(在继承JFinal框架的Controller的子类上加上注解标签@JFinalController)**
```java
@JFinalController({"/", "/hello"})
public class HelloController extends Controller {
public void index() {
User user = User.dao.findById("1500453530921");
renderHtml("id:" + user.getId() + "
" + "name:" + user.getName() + "
" + "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的配置类的路由配置上注册该标签(注入方式:二选一)**
```java
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
}
});
}
.....
}
```
#### Model实体类注解注入
**1.控制器注解注入(在继承JFinal框架的Model的子类上加上注解标签@JFinalModel)**
```java
//使用例子
@JFinalModel(tableName = "user")
public class User extends Model {
}
//标签类
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface JFinalModel {
String tableName(); //数据库表名
String primaryKey() default "id"; //主键名称,默认为“id”
}
```
**2.在JFinal的配置类的插件配置方法上注册该标签(注入方式:二选一;注:注解注入插件必须在ActiveRecordPlugin插件之前添加)**
```java
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);
}
.....
}
```
#### maven
```java
com.github.yu1234.JFinalPluginExt
annotation
1.0.0
```