В этом блоге кратко описывается, как реализовать пользовательские области в 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