Область по умолчанию для Spring bean-компонентов singleton
Spring Documentation . Это означает, что будет создан только один экземпляр компонента. Это можно продемонстрировать с помощью следующего фрагмента кода:
@RestController
public class TestController {
@GetMapping("/test")
public void test() {
System.out.println(this);
}
}
Каждый раз, когда вызывается конечная точка /test
, выходные данные будут одинаковыми, что-то вроде этого:
com.example.TestController@17870d99
com.example.TestController@17870d99
com.example.TestController@17870d99
Использование с другой областью действия (например, request
scope), запустив следующий код:
@RestController
@Scope(value = WebApplicationContext.SCOPE_SESSION)
public class TestController {
@GetMapping("/test")
public void test() {
System.out.println(this);
}
}
мы получим следующий вывод:
com.example.TestController@3213427f
com.example.TestController@2318434f
com.example.TestController@5e0df012
Мы видим, что контроллер создается с каждым сеансом (в нашем случае с каждым вызовом /test
конечной точки).
Теперь не рекомендуется использовать переменную экземпляра в одноэлементном бине, поскольку это будет иметь непредвиденные последствия ( как условия гонки или утечка несанкционированных данных). Если мы хотим использовать переменную экземпляра, мы должны использовать соответствующую область видимости для компонента.
Или вообще избегать переменных экземпляра.