原型 Bean 未按预期自动布线
测试控制器.java
@RestController
public class TestController {
@Autowired
private TestClass testClass;
@RequestMapping(value = "/test", method = RequestMethod.GET)
public void testThread(HttpServletResponse response) throws Exception {
testClass.doSomething();
}
}
测试类.java
@Component
@Scope("prototype")
public class TestClass {
public TestClass() {
System.out.println("new test class constructed.");
}
public void doSomething() {
}
}
如您所见,我正在尝试确定在访问“xxx/test”时是否注入了新的。 只打印了一次(第一次我触发“xxx/test”),而我期望它打印得一样。这个均值对象只能是吗?那么如何运作呢?TestClass
"new test class constructed."
@Autowired
@Singleton
@Scope
编辑:
测试控制器.java
@RestController
public class TestController {
@Autowired
private TestClass testClass;
@RequestMapping(value = "/test", method = RequestMethod.GET)
public void testThread(HttpServletResponse response) throws Exception {
testClass.setProperty("hello");
System.out.println(testClass.getProperty());
}
}
我尝试了解决方案,注册为.这是我访问“xxx/test”时的三次结果@Valerio Vaudi
Scope(scopeName = "request")
(第一次)
- 构建了新的测试类。
- 零
(秒)
- 零
(第三)
- 零
我不明白为什么结果是空的,因为它不会在每次使用它时重建一个新的结果。
然后我尝试了解决方案:@Nikolay Rusev
@Scope("prototype")
(第一)
- 新建成的。
- 新建成的。
- 零
(秒)
- 新建成的。
- 新建成的。
- 零
(第三)
- 新建成的。
- 新建成的。
- 零
这很容易理解,因为每次我使用它(TestClass)时,Spring都会自动重新生成它的新实例。但是第一个场景我仍然无法理解,因为它似乎只为每个请求保留一个新实例。
真正的目的是:在每个请求生命周期中,都需要一个新的(如果需要),并且只需要一个。目前,似乎只有解决方案是可行的(我已经知道),但我只想知道这是否可以通过使用+ +自动完成。testClass
ApplicationContext
@Component
@Scope
@Autowired