小弟在做WEBSERVICE的开发工作。目前在看以前公司的一个平台的代码发现一个问题,之前的开发里,用户合法性的判断是和服务逻辑的边界类代码混在一起的。造成了代码的大量重复。(呵呵,汗一个,说问题的时候光说别人,其实我自己写的代码还不如人家呢)所以我考虑以后进入开发后,这类型的代码要抽取出来。WEBSERVICE里又没有filter之类的东西,所以我想到的办法就是AOP验证用户合法性的代码在代理类里,服务边界类只需要关注自己的逻辑就可以了。但是现在问题来了,仔细看了代码后发现服务类里也有一些逻辑需要用户信息,这些逻辑是各不相同的。但是如果这样一来,我等于每一次提供服务的时候一个用户信息就要查两次数据库如果代理类在处理完毕后可以把用户信息这个对象传给被代理类就好了。或者说如果要实现这个东西有可能代理类和被代理类对外公布的方法参数是不一样的。(这样貌似就违背了代理模式的原则)
我想到的解决方法,是让接口尽量抽象化一些比如对外接口是JSON数据格式的。那么我可以在查询完用户信息后,把用户信息补充到JSON里去或者发布的接口有MAP之类的对象,代理类验证完毕后,把用户信息往MAP里放但是总觉得还应该有好的办法,所以上来问问众位高人啊~
谢谢大家
我想到的解决方法,是让接口尽量抽象化一些比如对外接口是JSON数据格式的。那么我可以在查询完用户信息后,把用户信息补充到JSON里去或者发布的接口有MAP之类的对象,代理类验证完毕后,把用户信息往MAP里放但是总觉得还应该有好的办法,所以上来问问众位高人啊~
谢谢大家
public class LocalVars{ public static ThreadLocal<String> local1 = new ThreadLocal<String>(); public static String local2;}
然后写一个线程类
public class Thread1 extends Thread{ public void run(){
LocalVars.local1.set(String.valueOf(new Random().nextInt()));
LocalVars.local2 = String.valueOf(new Random().nextInt()); for(int index = 0; index < 10; index++){
if(index == 4){
System.out.println("local1 = " + LocalVars.local1.get());
System.out.println("local2 = " + LocalVars.local2);
}else{
sleep(1000);
}
}
}
}然后在main方法里创建两个线程,这两个线程打出来的值local1的值是不一样的,因为ThreadLocal是线程的局部变量local2的值是一样的,因为两个线程中后一个赋值的线程把前一个线程赋的值给擦掉了
8楼的兄弟给的答案是可以实行的
恕我山炮了~