这是@autowire TestRunner testRunner
的控制器。我认为spring会创建具有单调范围的bean,因此testRunner将在所有线程之间共享。
此testRunner
使用secc方法来设置一些类级别的变量。
这种方法会在多线程中造成问题吗?
@Controller
@RequestMapping("/welcome")
public class HomeController {
@Autowire
TestRunner testRunner;
@RequestMapping(method = RequestMethod.GET)
public void addCustomerPage(User user) {
A a = new A();
a.set(user.get) ....
B b = new B();
b.set(user.get) ....
C c = new C();
c.set(user.get) ....
testRunner.setTestRunner(a, b, c);
Thread t = new Thread(testRunner);
t.start();
}
}
这是TestRunner类。
@Component
public class TestRunner implements Runnable{
private A a;
private B b;
private C c;
public void setTestRunner(A a, B b, C c){
this.a = a;
this.b = b;
this.c = c;
}
public void run() {
// use a,b,c.
}
}
最佳答案
是的,
您的测试运行程序类是单例类,因此它位于应用程序范围内,从而在整个应用程序之间共享同一实例。
但是,您以有状态方式使用它,根据您在请求中收到的内容为其设置值。
要么将您的TestRunner类范围设置为原型,要么根本不自动接线并创建一个新的testrunner实例
@Scope(value = "prototype")