#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");
}
}
```
###国际化支持 是中国的 才是世界的(使用方法见文档,不想太多解释了)
###新特性初探,就是这样,等明白这个以后,大家可以看看新特性的试用场景,后续视频教程也会更上(前提是,有时间...,木有时间,无限期延后)极速开发,快就是这么任性,你不知道的Jfinal2.0新特性
原文:http://my.oschina.net/u/257950/blog/468588