Skip to content

Doc005.AutoScanControllers

Ping.X edited this page Feb 12, 2016 · 2 revisions

还记得第一个例子中,HapporContext的设置方式吗?

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        HapporAutomaticContext context = new HapporAutomaticContext();
        context.runServer();
    }

HapporAutomaticContextHapporContext的子类,它在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程序了。 更进一步地,你也许想了解:

Clone this wiki locally