(2019年8月27日 07:54:24)

仔细思考后,你会发现,一个方法在被执行时,它可以获得的输入参数根本上来看只有2个地方:

1. 方法入参
2. 线程上下文,通过当前执行的线程所绑定的上下文信息

(例如spring mvc中获得当前request对象,都是通过和线程绑定才得以拿到)

因此,如果我要实现像切面一样,将一个相同的信息,传递给不同的很多个方法,那就只能用线程上下文,不然每个方法都要传递这个参数,不管是加参数,还在在参数中加参数,都很麻烦。

但是,线程上下文这种方式也有一定的副作用,首先,框架规范必须是支持线程模型的,例如servlet。其次,在线程用完的时候,要记得清理现场,否则线程变量就可能导致线程执行新的任务时失败。

在Spring的AOP的支持下,上面的输入参数还有第3个地方可以附属到:

  1. 方法、类级别的注解;但是缺点是注解所表达的灵活性比较低,也可以把注解当做是方法入参的一种特殊形式

参考

  1. https://www.zhihu.com/question/332042250 为什么 Java 坚持多线程不选择协程?
文档更新时间: 2020-08-22 10:07   作者:nick