Я пытаюсь понять различные области применения компонентов. При работе с @RequestScope я не вижу сообщения, выведенного на консоль из конструктора и метода Destroy(), чтобы подтвердить, когда этот компонент действительно создается или уничтожается. Это работает для @Singleton и @Prototype Beans.
Также person1.counter++; похоже, не сбрасывается после каждого запроса, что означает, что Bean на самом деле не воссоздается заново для каждого запроса, как следует из названия.
Но если я добавлю увеличенияCounter() в Person.java и вызовите это из контроллера, затем счетчик сбрасывается, и сообщения метода конструктора и уничтожения() печатаются в консоли. Что здесь происходит. В руководствах по @RequestScope ничего из этого не упоминается.
int increaseCounter() {
counter++;
return counter;
}
Мне также удалось изменить код так, чтобы
"Лицо создано" и
"Человек уничтожен"
отображалось, но person1.counter++; никогда не сбрасывается, как будто компонент на самом деле не уничтожается.
Person.java
package com.ivoronline.springboot_accessories_beans_scope_request;
import jakarta.annotation.PreDestroy;
import org.springframework.stereotype.Component;
import org.springframework.web.context.annotation.RequestScope;
@Component
@RequestScope
public class Person {
//PROPERTIES
public String name;
public int counter;
//CONSTRUCTOR
Person() {
System.out.println("Person Created");
}
//DESTROY
@PreDestroy
public void destroy() {
System.out.println("Person Destroyed");
}
}
Controller.java
package com.ivoronline.springboot_accessories_beans_scope_request;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class Controller {
//PROPERTIES
@Autowired Person person1; //New Instance/Bean
@Autowired Person person2; //New Instance/Bean
//=========================================================================================================
// SET PERSON NAME
//=========================================================================================================
@RequestMapping("setPersonName")
void setPerson() {
person1.name = "John";
person2.name = "Bill";
person1.counter++;
}
//=========================================================================================================
// GET PERSON NAME
//=========================================================================================================
@RequestMapping("getPersonName")
String getPerson() {
return person1.counter + ":" + person1.name + " - " + person2.name;
}
}
Подробнее здесь: https://stackoverflow.com/questions/788 ... in-console