Class Action {
public MyRunner myRunner = new MyRunner();
public void doAction(){
Thread t = new Thread(myRunner);
t.start();
}
}
现在是如何在MyRunner的run()里,获得Request!?,需要取当前全网址。
可否注入?
因为Runner里是通过nutz的IOC注入了多个service,实际上是service要这个全网址拼链接。
@IocBean(name="inMsgParaserRunner")
public class InMsgParaserRunner implements Runnable {
@Inject("msgServices")
private List<IMsgService> msgServices;
}
你这种情形,这个runner不去实现runnable,而当作一个工厂类:比如实现个getRunnable(String fullPath)方法;再在doAction里面,构建线程的时候去new Thread(myRunner.getRunnable(calcFullPath(request))),比较好。
@IocBean(name="inMsgParaserRunner", singleton=false)
public class InMsgParaserRunner implements Runnable {
@Inject("msgServices")
private List<IMsgService> msgServices;
private String uri;
}
@IocBean
public class XXXAction {
@Inject("refer:$ioc")
private Ioc ioc;
@At
public void xxx() {
InMsgParaserRunner runner = ioc.get(InMsgParaserRunner.class);
runner.setUri(xxxx);
new Thread(runner).start();
}
@wendal 你6楼的代码我是明白的,这样Runner内部是可以使用了。
但由于是Runner的注入变量service里用这个url拼接,不会又每个service来setUrl(String url)吧,这样要改所有service的接口。
能不能优雅点?^_^!
-_-!
就是为了一个service需要这个上下文URL,改所有service的接口,也是醉了。。。真TM拗口。
谢谢兽哥先
我再试试静态变量行不行。建义nutz加个这样的工具类,嘻嘻。(子线程里也可以获到主线程的一些特殊变量。)
@wendal 我试过把ActionContext和request都放到Runner的实例变量,然后在run方法开头做Mvcs.setActionContext()和setReq().
但在Runner里注入的service(数组)的exe()里调用Mvcs.getActionContext()还是为空。
还没搞明到底注入的service在使用那一个线程的东东。
晚上再试了一下,这种情况可以直接在Action里把参数放到Runner类的静态变量中,然后子线程相关的类可以直接调用这个静态变量。
@IocBean
public class XXXAction {
@Inject("refer:$ioc")
private Ioc ioc;
@At
public void do() {
InMsgParaserRunner runner = ioc.get(InMsgParaserRunner.class);
runner.setUri(xxxx);
new Thread(runner).start();
}
@IocBean(name="inMsgParaserRunner")
public class InMsgParaserRunner implements Runnable {
private static String url;
public static String getUrl() {
return url;
}
public static void setUrl(String url) {
if (null == InMsgParaserRunner.url){
InMsgParaserRunner.url= url;
}else{
throw new IllegalArgumentException("不能重新赋值给该静态变量");
}
}
}
//其它的类使用时,直接
InMsgParaserRunner.getUrl() ;
问题解决,就是无啦啦多左个静态变量,眼晕。。