-
Notifications
You must be signed in to change notification settings - Fork 11
Doc005.AutoScanControllers
还记得第一个例子中,HapporContext的设置方式吗?
public static void main(String[] args) {
// TODO Auto-generated method stub
HapporAutomaticContext context = new HapporAutomaticContext();
context.runServer();
}HapporAutomaticContext是HapporContext的子类,它在new的时候会自动扫描当前classpath下的所有controller并加入controller链。
在扫描时,只有满足以下两个条件,才认为是一个类是controller:
- 这个类从
HttpController基类派生 - 这个类被
@Controller或@DefaultController修饰
这里涉及到注解标签,再回想第一个例子,Test类就是标注了@Controller注解:
@Controller(method="GET", uriPattern="^/test/(\\w+)")
public class Test extends HttpNormalHandler {@Controller注解包含两个参数:method和uriPattern,他们的含义一目了然。
另外还有一个@DefaultController注解,它不带参数,用于标注默认controller。
HapporAutomaticContext构造函数还可以带一个参数,可以限定在某个package下扫描,例如:
HapporAutomaticContext context = new HapporAutomaticContext("cn.lechange.happor.test");使用HapporAutomaticContext可以很方便地配置controller链,但是这里还有一个问题:
filter是有顺序的,在配置controller链时,filter必须在所有handler之前,并且人为指定顺序。
这个解决方法是这样的:filter类不光有@Controller注解,还需要加一个@Filter注解:
@Filter("myname")@Filter注解带一个参数,表示这个filter的名字。
HapporAutomaticContext在自动扫描controller时,将不会把带有@Filter注解的controller加入controller链,而是需要使用者自行设置,调用如下接口:
HapporAutomaticContext context = new HapporAutomaticContext();
context.addFilters(new String[] {"myname"});所有filter会放在所有现有的controller之前,并且依照addFilters时的数组顺序摆放。
通过以上的介绍,你应该已经可以很方便的使用happor创建webservice程序了。 更进一步地,你也许想了解: