Prototype Bean wird nicht wie erwartet automatisch verkabelt
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() {
}
}
Wie Sie sehen können, versuche ich herauszufinden, ob ein neuesTestClass
wurde beim Besuch von "xxx / test" injiziert."new test class constructed."
wurde nur einmal gedruckt (zum ersten Mal habe ich "xxx / test" ausgelöst), während ich erwartete, dass es gleichermaßen gedruckt wird. Ist das meine@Autowired
Objekt kann nur @ se@Singleton
? Wie funktioniert@Scope
Arbeit dann?
BEARBEITEN
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());
}
}
Ich habe es versucht@Valerio Vaudi
solution, registriert alsScope(scopeName = "request")
. Hier ist das dreimalige Ergebnis, wenn ich "xxx / test" besuche
(erstes Mal
neue Testklasse erstellt.Nul(zweite
Nul(dritte
NulIch verstehe nicht, warum das Ergebnis null ist, da es nicht jedes Mal, wenn ich es verwende, ein neues rekonstruiert.
Dann habe ich versucht@Nikolay Rusev
solution@Scope("prototype")
:
(zuerst
neue gebaut.neue gebaut.Nul(zweite
neue gebaut.neue gebaut.Nul(dritte
neue gebaut.neue gebaut.NulDies ist ziemlich einfach zu verstehen, da Spring bei jeder Verwendung (TestClass) automatisch eine neue Instanz davon generiert. Aber die erste Szene kann ich immer noch nicht verstehen, da sie anscheinend nur eine neue Instanz für jede Anforderung enthält.
er eigentliche Zweck ist: In jedem Anforderungslebenszyklus wird ein neuestestClass
ist erforderlich (falls erforderlich) und nur eines ist erforderlich. In diesem Moment scheint es nurApplicationContext
Lösung ist machbar (was ich bereits wusste), aber ich möchte nur wissen, ob dies automatisch mit @ gemacht werden ka@Component
+ @Scope
+ @Autowired
.