#Jfinal2.0新特性初探 Jfinal2.0发布了,我认为这个是里程碑式的发布,新加了不少好功能,这个博文主要是写个那些不想看文档,又想知道Jfinal2.0到底有什么新变动的同学们的,希望你们看完以后,会更加认识Jfinal
####只要拦截器做的好,没有AOP干不倒 ##Interceptor重现江湖 ###Interceptor细微变化1
public class DemoInterceptor implements Interceptor { public void intercept(Invocation inv) { System.out.println("Before method invoking"); inv.invoke(); System.out.println("After method invoking"); } }public class DemoInterceptor implements Interceptor { public void intercept(Invocation inv) { System.out.println("Before method invoking"); inv.invoke(); System.out.println("After method invoking"); } }
- 当前intercept参数由ActionInvocation变成了Invocation
- 增强了Invocation中的方法,能够在interceoptor中做更多有意思的事情(在文档AOP中有更加详细的介绍)#Jfinal2.0新特性初探 Jfinal2.0发布了,我认为这个是里程碑式的发布,新加了不少好功能,这个博文主要是写个那些不想看文档,又想知道Jfinal2.0到底有什么新变动的同学们的,希望你们看完以后,会更加认识Jfinal
####只要拦截器做的好,没有AOP干不倒 ##Interceptor重现江湖 ###Interceptor细微变化1 public class DemoInterceptor implements Interceptor { public void intercept(Invocation inv) { System.out.println("Before method invoking"); inv.invoke(); System.out.println("After method invoking"); } }
- 当前intercept参数由ActionInvocation变成了Invocation
- 增强了Invocation中的方法,能够在interceoptor中做更多有意思的事情(在文档AOP中有更加详细的介绍)
###Interceptor细分,引入InjectIntercept新成员
- 以前全局拦截是直接是一个GlobalInteceptor,现在,全局拦截器又细分出两个拦截器:控制层全局拦截器与业务层全局拦截器,也就是说,一个是在控制层使用,拦截所有控制层的方法,一个是在业务层的拦截,也就是说,我们以后再业务层理,也可以向控制层那样拦截处理了(喜大普奔吧,骚年们,这不知道要省出多少事情来)
- 还新加入了Inject拦截器
###ClearInterceptor正式更名为Clear
- 使用方法类似 只是注解符发生变化 加入项目升级到2.0后,请时刻关注这个更改特性
###AOP细分
- 控制层 AOP
- 业务层 AOP
- 业务层拦截器的触发需要先使用 enhance 方法对目标对象进行增强,然后调用目标方法即可(详细请看文档)
// 定义需要使用AOP的业务层类 public class OrderService { // 配置事务拦截器 @Before(Tx.class) public void payment(int orderId, int userId) { // service code here } } // 定义控制器,控制器提供了enhance系列方法可对目标进行AOP增强 public class OrderController extends Controller { public void payment() { // 使用 enhance方法对业务层进行增强,使用具有AOP能力 OrderService service = enhance(OrderService.class); // 调用payment方法时将会触发拦截器 service.payment(getParaToInt("orderId"), getParaToInt("userId")); }}
##有DUANG,DUANG特效才叫这酸爽
####一位新成员 Enhancer 工具类(DUANG)
- 作用:用来对目标进行增强,让其拥有 AOP 的能力 也就是说,如果某个类的业务方法,想拥有业务AOP能力,则可以使用此工具类进行增强
####又一位新成员 Inject拦截器(DUANG)
- Inject 拦截器是指在使用 enhance 方法增强时使用参数传入的拦截器。 Inject 可以对目标完 全无侵入地应用 AOP
public void injectDemo() { // 为enhance方法传入的拦截器称为Inject拦截器,下面代码中的Tx称为Inject拦截器 OrderService service = Enhancer.enhance(OrderService.class, Tx.class ); service.payment(…); }
-
第二个参数 Tx.class 被称之为 Inject 拦截器,使用此 方法便可完全无侵入地对目标进行 AOP 增强
-
Enhancer+Inject拦截器 ,从此世界上多了一门功夫,叫DUANGDUANG特效 ###多数据源支持(这个在1.9里就有了)
-
详细配置,参看文档吧,切换数据源什么的都很方便,直接通过db.use("dataSource").find(...)即可使用不同数据源中的数据
###非WEB环境里使用ActiveRecord(这个很重要)
- 这个问题很多人提出过,现在2.0中直接在文档中写出来了,就不用纠结了,各种环境都是没有压力的),使用如下:###多数据源支持(这个在1.9里就有了)
- 详细配置,参看文档吧,切换数据源什么的都很方便,直接通过db.use("dataSource").find(...)即可使用不同数据源中的数据
###非WEB环境里使用ActiveRecord(这个很重要)
- 这个问题很多人提出过,现在2.0中直接在文档中写出来了,就不用纠结了,各种环境都是没有压力的),使用如下:
public class ActiveRecordTest {public static void main(String[] args) { DruidPlugin dp = new DruidPlugin("localhost", "userName", "password"); ActiveRecordPlugin arp = new ActiveRecordPlugin(dp); arp.addMapping("blog", Blog.class); // 与web环境唯一的不同是要手动调用一次相关插件的start()方法 dp.start(); arp.start(); // 通过上面简单的几行代码,即可立即开始使用 new Blog().set("title", "title").set("content", "cxt text").save(); Blog.me.findById(123); }}
- 写各种测试用例,这个据对OK的(不要说Jfinal不会写测试用例了,Junit加这个,Jfinal的测试用例就绝对可以搞定了) ####我的最爱(RedisPlugin)
- 他是作为JfinalPlugin存在,通过使用redis,我们可以构建缓存,并且实现很多Redis的应用,谁说Java只能做业务管理系统,互联网项目,照干不误。加入他和缓存结合起来,我勒个去,这酸爽...
####非web 环境用 使用 RedisPlugin,写各种测试用例,这个据对OK的
public class RedisTest { public static void main(String[] args) { RedisPlugin rp = new RedisPlugin("myRedis", "localhost"); // 与web下唯一区别是需要这里调用一次start()方法 rp.start(); Redis.use().set("key", "value"); Redis.use().get("key"); }}
###国际化支持 是中国的 才是世界的(使用方法见文档,不想太多解释了)
###新特性初探,就是这样,等明白这个以后,大家可以看看新特性的试用场景,后续视频教程也会更上(前提是,有时间...,木有时间,无限期延后)