2017-08-04 14:39
@dear7575 使用一个全局拦截器,关注一下 DbKit.getConfig() 出来的 Config 对象中有一个 setThreadLocalConnection(Connection ) 方法
用这个方法可以直接为当前线程提供一个 connection,那么后续的数据库操作都会直拦支使用这个 connnection 对象了
更进一步,参考一下 com.jfinal.plugin.activerecord.tx.Tx.java 这个源代码,里面有这种用法,大致分几步:
1:在拦截器中通过某种方式得知当前操作的用户身份,根据登录信息很容易知道
2:通过用户身份,得到该用户的 configName
3:通过 DbKit.getConfig(configName) 得到这个用户的 config 对象
4:通过 config.setThreadLocalConnection(config.getDataSource().getConnection()) 为当前线程设置上 connection 对象
5:调用 inv.invoke()
6:在 finally 块中调用 config.close(connection)
2017-08-04 11:57
@海哥 传参是不限制表达式的, 你可以为参数传入赋值表达式,这个从来都是支持的
楼主的代码是想在扩展指令中知道传入的参数名称是什么,而不是通过约定的方式限定参数名是什么
jfinal 3.2 已经添加了 Assign.getId() 方法,这样就可以在扩展指令中通过 assign.getId() 知道传入的形参名是啥了
2017-08-04 11:52
@极客 spring 的依赖注入是为了植入代理类,从而实现 aop 这样的功能,而 jfinal 可以在 controller 层以及 service 层实现 aop,所以就没有必要使用注入了,这是一个观念的转变,需要点适应的时间