JAX-RS 2.0 與受管理 Bean 的整合
Liberty 中的 JAX-RS 2.0 支援使用受管理 Bean 作為根目錄資源類別、提供者和應用程式子類別。
- 如果要整合 JAX-RS 2.0 與受管理 Bean,請在 server.xml 檔中的 featureManager 元素內,新增 <feature>managedBeans-1.0</feature> 項目。
- 如果要使用受管理 Bean 作為 JAX-RS 資源、提供者或應用程式,請使用 @ManagedBean 來標註這些類別。例如,依如下所示,使用 Interceptors 受管理 Bean 特性:
@ManagedBean ("JaxrsManagedBean" ) @Path ("/managedbean" ) public class ManagedBeanResource { public static class MyInterceptor { @AroundInvoke public Object around(InvocationContext ctx) throws Exception { System. out .println("around() called" ); return ctx.proceed(); } } @GET @Produces( "text/plain") @Interceptors(MyInterceptor. class ) public String getIt() { return "Hi managed bean!" ; } }
JAX-RS 2.0 與受管理 Bean 的限制
只有下列這些受「環境定義和相依關係注入 (CDI)」管理的 JAX-RS 元件類別,才支援資源注入:
- 應用程式子類別
- 提供者
- 根目錄資源類別
具體來說,如果要將受管理 Bean 實例注入至特定的 JAX-RS 元件類別,您必須確定這個元件類別可以當成 CDI Bean 來辨識及管理。
舉例來說,如果要依如下所示,將 printMyName 受管理 Bean 實例注入至 JAX-RS 根目錄資源類別,您必須在 .WAR file/WEB-INF 儲存庫中新增一個空白 beans.xml 檔:
@Path ("/managedbean" )
public class ManagedBeanResource {
@Resource(name = "printMyName" )
private PrintMyName printMyName ;
@GET
@Produces( "text/plain")
public String getIt() {
printMyName .print();
return "Hi managed bean!" ;
}
}
@ManagedBean ("printmyname" )
public class PrintMyName {
public void print() {
// TODO Auto-generated method stub
System. out .println("Injection of ManagedBean is successful" );
}
}