Прототип Bean не подключается автоматически, как ожидалось
TestController.java
@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
был введен при посещении "ххх / тест"."new test class constructed."
был напечатан только один раз (в первый раз я вызвал «xxx / test»), в то время как я ожидал, что он будет напечатан одинаково. Это значит@Autowired
объект может быть только@Singleton
? Как@Scope
работать тогда?
РЕДАКТИРОВАТЬ:
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")
, Вот трижды результат, когда я посещаю "ххх / тест"
(первый раз)
новый тестовый класс построен.ноль(Второй)
ноль(в третьих)
нольЯ не понимаю, почему результат нулевой, так как он не восстанавливает новый каждый раз, когда я его использую.
Потом я попробовал@Nikolay Rusev
решение@Scope("prototype")
:
(первый)
новый построен.новый построен.ноль(Второй)
новый построен.новый построен.ноль(в третьих)
новый построен.новый построен.нольЭто довольно легко понять, поскольку каждый раз, когда я его использую (TestClass), Spring автоматически создает новый экземпляр. Но первая сцена, которую я до сих пор не могу понять, так как она, кажется, сохраняет только один новый экземпляр для каждого запроса.
Настоящая цель: В каждом жизненном цикле запроса, новыйtestClass
требуется (если необходимо), и только один требуется. В данный момент кажется толькоApplicationContext
решение выполнимо (что я уже знал), но я просто хочу знать, может ли это быть сделано автоматически с помощью@Component
+ @Scope
+ @Autowired
.