TestController.javaПрототип Bean не получает autowired как ожидалось
@RestController
public class TestController {
@Autowired
private TestClass testClass;
@RequestMapping(value = "/test", method = RequestMethod.GET)
public void testThread(HttpServletResponse response) throws Exception {
testClass.doSomething();
}
}
TestClass.java
@Component
@Scope("prototype")
public class TestClass {
public TestClass() {
System.out.println("new test class constructed.");
}
public void doSomething() {
}
}
Как вы можете видеть, я пытаюсь выяснить, имеет ли новый TestClass
был вводится при посещении «xxx/test». "new test class constructed."
был напечатан только один раз (первый раз я запускал «xxx/test»), в то время как я ожидал, что он будет напечатан одинаково. Это значит, что @Autowired
объект может быть только @Singleton
? Как работает @Scope
?
EDIT:
TestController.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());
}
}
Я попытался @Valerio Vaudi
решение, зарегистрированное в качестве Scope(scopeName = "request")
. Вот результат трех раз, когда я посещаю «ххх/тест»
(первый раз)
- новый тестовый класс, построенный.
- нуль
(второй)
- нуль
(третий)
- нуль
Я не понимаю, почему результат null, так как он не восстанавливает новый каждый раз, когда я его использую.
Затем я попытался @Nikolay Rusev
решение @Scope("prototype")
:
(первый)
- новый построенный.
- новый товар.
- нуль
(второй)
- новый построен.
- новый товар.
- нуль
(третий)
- новый один построен.
- новый товар.
- нуль
Это довольно легко понять, так как каждый раз, когда я использую его (TestClass), Spring автоматически регенерировать новый экземпляр. Но первая сцена, которую я до сих пор не могу понять, поскольку она, похоже, сохраняет только один новый экземпляр для каждого запроса.
Настоящая цель: В каждом жизненном цикле запроса требуется новый testClass
(при необходимости), и требуется только одно. На данный момент кажется возможным только решение ApplicationContext
(что я уже знал), но я просто хочу знать, можно ли это сделать автоматически, используя @Component
+ @Scope
+ @Autowired
.
я не могу получить его, где приходит третий нуль? разместите свой полный код TestClass ... –