当前位置: 首页 > news >正文

jfinal的model,service类继承结构梳理

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

上几篇博客,学习了shiro身份验证和授权,jfinal的model层抽象,service层抽象,大体将shiro整合到jfinal,现在具体要做的是实现shiro中ShiroRealm类里调用的方法,如:findByUsername(username),findRolesByUserId(userid),findUserPermsByUserId(userid),

现在再来梳理下jfinal里如User,BaseUser,BaseModel三者的关系,三者的继承关系如下:

public class User extends BaseUser<User>

public abstract class BaseUser<M extends BaseUser<M>> extends BaseModel<M> implements IBean

public abstract class BaseModel<M extends BaseModel<M>> extends Model<M>

接下来依次解读一下上面的三个model类的继承:

(1)首先,类User 继承了一个持有User 对象的类BaseUser,这样User就可以使用BaseUser里的getter,setter方法,并且这里的getter,setter方法操作的就是User对象。

(2)其次,类BaseUser的对象存入继承了BaseUser的User 类型的对象,BaseUser继承了一个持有BaseUser对象的类BaseModel,这样BaseUser就可以使用BaseModel里的方法,并且这里方法操作的就是User 对象。

(3)最后,BaseModel的对象存入了继承了BaseModel类型的对象,BaseModel继承了Model,这样BaseModel就可以使用Model里的方法,并且这里方法操作的就是User对象。

然后再来梳理下UserService,BaseUserService,BaseService三者的关系,三者的继承关系如下:

public class UserService extends BaseUserService<User>

public abstract class BaseUserService<M extends BaseUser<M>> extends BaseService<M>

继续解读上面的三个service类:

(1)首先, UserService继承了持有User对象的类BaseUserService,这样UserService就可以调用BaseUserService里的方法操作User。

(2)其次,持有继承了BaseUser类对象的BaseUserService,继承了BaseService,这样UserService就可以调用BaseUserService里的方法操作User。

至此,项目主要的类层次梳理清楚了,现在可以实现具体方法了。

转载于:https://my.oschina.net/u/2427561/blog/1525207

相关文章:

  • 大数据项目成功的七大秘密
  • C#操作DataTable类
  • 【一个电脑多域名】一个电脑配置多个模拟域名的方法(用于测试)
  • 挂断电话demo
  • 和 || 运算
  • 怎样借助Python爬虫给宝宝起个好名字
  • js之点击值发生变化
  • 解决 wcf HTTP 无法注册 另一应用程序正在使用 TCP 端口 80
  • [树链剖分]luogu P2590 ZJOI 树的统计
  • linux中断线程化分析【转】
  • php linux 脚本语法解释
  • python之udp协议的套接字
  • PHP变量
  • AdTime:多屏互动 进化中的大数据营销
  • Unity2018新功能抢鲜 | Package Manager
  • 【笔记】你不知道的JS读书笔记——Promise
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • input实现文字超出省略号功能
  • JavaScript类型识别
  • JS+CSS实现数字滚动
  • NLPIR语义挖掘平台推动行业大数据应用服务
  • Python中eval与exec的使用及区别
  • spark本地环境的搭建到运行第一个spark程序
  • Vue全家桶实现一个Web App
  • 包装类对象
  • 坑!为什么View.startAnimation不起作用?
  • 每天一个设计模式之命令模式
  • k8s使用glusterfs实现动态持久化存储
  • ​LeetCode解法汇总307. 区域和检索 - 数组可修改
  • (1)(1.8) MSP(MultiWii 串行协议)(4.1 版)
  • (bean配置类的注解开发)学习Spring的第十三天
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)linux使用docker容器运行mysql
  • (十三)Flask之特殊装饰器详解
  • (转)重识new
  • .class文件转换.java_从一个class文件深入理解Java字节码结构
  • .locked1、locked勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET DataGridView数据绑定说明
  • .Net 路由处理厉害了
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)
  • .Net 知识杂记
  • .Net多线程总结
  • .NET基础篇——反射的奥妙
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .NET牛人应该知道些什么(2):中级.NET开发人员
  • .pyc文件还原.py文件_Python什么情况下会生成pyc文件?
  • @取消转义
  • [ vulhub漏洞复现篇 ] Apache Flink目录遍历(CVE-2020-17519)
  • [AHOI2009]中国象棋 DP,递推,组合数
  • [ARC066F]Contest with Drinks Hard
  • [AutoSar]BSW_Memory_Stack_003 NVM与APP的显式和隐式同步
  • [BUG]vscode插件live server无法自动打开浏览器
  • [caffe(二)]Python加载训练caffe模型并进行测试1
  • [C进阶] 数据在内存中的存储——浮点型篇
  • [ffmpeg] x264 配置参数解析