SeamFramework.orgCommunity Documentation
Web Bean 為架構的平台,它可用來進行其它技術的延伸與整合。因此,Web Bean 提供了一組讓 Web Bean 的 portable extension 開發人員可使用的 SPI。比方說,下列類型的延伸為 Web Bean 設計人員所設想的:
和商業流程管理上的整合、
和第三方架構(例如 Spring、Seam、GWT 或 Wicket)上的整合,以及
基於 Web Bean 程式撰寫模型(Programming Model)的新技術。
延伸 Web Bean 的神經中樞為 Manager
這個物件。
Manager
介面能讓我們程式性地註冊並取得 Web Bean、攔截器(interceptor)、裝飾器(decorator)、觀察器(observer),以及 context。
public interface Manager
{
public <T
> Set<Bean<T
>
> resolveByType(Class<T
> type, Annotation... bindings);
public <T
> Set<Bean<T
>
> resolveByType(TypeLiteral<T
> apiType,
Annotation... bindings);
public <T
> T getInstanceByType(Class<T
> type, Annotation... bindings);
public <T
> T getInstanceByType(TypeLiteral<T
> type,
Annotation... bindings);
public Set<Bean<?>
> resolveByName(String name);
public Object getInstanceByName(String name);
public <T
> T getInstance(Bean<T
> bean);
public void fireEvent(Object event, Annotation... bindings);
public Context getContext(Class<? extends Annotation
> scopeType);
public Manager addContext(Context context);
public Manager addBean(Bean<?> bean);
public Manager addInterceptor(Interceptor interceptor);
public Manager addDecorator(Decorator decorator);
public <T
> Manager addObserver(Observer<T
> observer, Class<T
> eventType,
Annotation... bindings);
public <T
> Manager addObserver(Observer<T
> observer, TypeLiteral<T
> eventType,
Annotation... bindings);
public <T
> Manager removeObserver(Observer<T
> observer, Class<T
> eventType,
Annotation... bindings);
public <T
> Manager removeObserver(Observer<T
> observer,
TypeLiteral<T
> eventType, Annotation... bindings);
public <T
> Set<Observer<T
>
> resolveObservers(T event, Annotation... bindings);
public List<Interceptor
> resolveInterceptors(InterceptionType type,
Annotation... interceptorBindings);
public List<Decorator
> resolveDecorators(Set<Class<?>
> types,
Annotation... bindings);
}
我們可透過注入來取得 Manager
的一個 instance:
@Current Manager ��
Bean
這個 abstract class 的 instance 代表 Web Bean。應用程式中的每個 Web Bean 都會有個與 Manager
物件註冊的 Bean
instance。
public abstract class Bean<T> {
private final Manager manager;
protected Bean(Manager manager) {
this.manager=manager;
}
protected Manager getManager() {
return manager;
}
public abstract Set<Class> getTypes();
public abstract Set<Annotation> getBindingTypes();
public abstract Class<? extends Annotation> getScopeType();
public abstract Class<? extends Annotation> getDeploymentType();
public abstract String getName();
public abstract boolean isSerializable();
public abstract boolean isNullable();
public abstract T create();
public abstract void destroy(T instance);
}
您可藉由調用 Manager.addBean()
來延伸 Bean
class 並註冊 instance 以便提供較新、未經 Web Bean 規格定義(基本與企業級 Web Bean、producer method 以及 JMS 端點)的 Web Bean 上的支援。比方說,我們可使用 Bean
class 來允許另一個架構所管理的物件被注入 Web Bean 之中。
Web Bean 規格定義了 Bean
的兩個 subclass:Interceptor
和 Decorator
。