В этом блоге кратко описывается, как реализовать пользовательские области в CDI с использованием Weld 1.1 и Spring 3.1. Чтобы получить основную информацию о области видимости, см. Ссылку Spring или ссылку Weld соответственно.
Пользовательские области в Spring
В Spring вы должны реализовать свою собственную область, используя интерфейс Scope . Я реализовал пользовательскую область как копию области запроса для иллюстрации:
package com.mycompany.springapp.scope; import org.springframework.beans.factory.config.Scope; import org.springframework.web.context.request.AbstractRequestAttributesScope; import org.springframework.web.context.request.RequestAttributes; public class MyCustomScope extends AbstractRequestAttributesScope implements Scope { @Override protected int getScope() { return RequestAttributes.SCOPE_REQUEST; } /** * There is no conversation id concept for a request, so this method * returns <code>null</code>. */ public String getConversationId() { return null; } }
Затем вы регистрируете свою новую область видимости в своем файле beans.xml:
Затем вы можете использовать его, как и все другие встроенные области:
package com.mycompany.springapp.scope; import org.springframework.context.annotation.Scope; import org.springframework.stereotype.Component; @Component @Scope("custom") public class MyCustomScopedService { }
Смотрите
здесь для получения дополнительной информации.
Пользовательские области действия с CDI
В CDI — в соответствии с моделью программирования CDI — вы сначала определяете собственную аннотацию области действия:
Затем есть
интерфейс Context, который вам нужно реализовать. Я сделал его копию HttpRequestScope для иллюстрации.
Вы присваиваете новую аннотацию области бинам, которые созданы в этой области:
@CustomScoped public class MyCustomScopeService { ... }
Для регистрации области создайте этот класс и поместите его вместе с вашим приложением в контейнер с поддержкой CDI. Среда выполнения CDI зарегистрирует его автоматически.
Смотрите
эту запись в блоге для всестороннего примера.
Нечего жаловаться! Обе технологии прекрасно поддерживают расширения для областей и контекста.
От http://niklasschlimm.blogspot.com/2011/07/custom-scopes-in-cdi-10-and-spring-31.html