Spring IoC контейнер: Java конфигурация, указание Scope бинов
Spring включает аннотацию @Scope, так что вы можете указать область действия компонента с помощью нее.
Использование аннотации @Scope
Вы можете указать, что ваши bean-компоненты, определенные с аннотацией @Bean, должны иметь определенную область действия. Вы можете использовать любую из стандартных областей, указанных в посте области действия bean.
Область по умолчанию - singleton, но вы можете переопределить это с помощью аннотации @Scope, как показано в следующем примере:
Java
@Configuration
public class MyConfiguration {
@Bean
@Scope("prototype")
public Encryptor encryptor() {
// ...
}
}
Kotlin
@Configuration
class MyConfiguration {
@Bean
@Scope("prototype")
fun encryptor(): Encryptor {
// ...
}
}
@Scope и scoped-proxy
Spring предлагает удобный способ работы с зависимостями в пределах области с помощью прокси-объектов. Самый простой способ создать такой прокси при использовании конфигурации XML - это элемент <aop:scoped-proxy/>. Конфигурирование ваших bean-компонентов в Java с аннотацией @Scope предлагает эквивалентную поддержку с атрибутом proxyMode. По умолчанию прокси отсутствует (ScopedProxyMode.NO), но вы можете указать ScopedProxyMode.TARGET_CLASS или ScopedProxyMode.INTERFACES.
Если вы перенесете пример прокси-сервера с областью действия из справочной документации XML на наш @Bean с использованием Java, это будет похоже на следующее:
Java
// bean-объект в HTTP Session-области,
// предоставляемый в качестве прокси
@Bean
@SessionScope
public UserPreferences userPreferences() {
return new UserPreferences();
}
@Bean
public Service userService() {
UserService service = new SimpleUserService();
// ссылка на проксируемый компонент userPreferences
service.setUserPreferences(userPreferences());
return service;
}
Kotlin
// bean-объект в HTTP Session-области,
// предоставляемый в качестве прокси
@Bean
@SessionScope
fun userPreferences() = UserPreferences()
@Bean
fun userService(): Service {
return SimpleUserService().apply {
// ссылка на проксируемый компонент userPreferences
setUserPreferences(userPreferences()
}
}
Читайте также:
- Spring IoC контейнер: Java конфигурация, использование аннотации @Bean, получение обратных вызовов жизненного цикла
- Spring IoC контейнер: Java конфигурация, использование аннотации @Bean, зависимости бина
- Spring IoC контейнер: Java конфигурация, использование аннотации @Bean, объявление Bean
Комментарии
Отправить комментарий