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

Nul

Ich 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.Nul

Dies 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.

Antworten auf die Frage(10)

Ihre Antwort auf die Frage