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 来注释这些类。例如,按如下所示使用拦截器受管 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!" ; } }
对带有受管 bean 的 JAX-RS 2.0 的限制
由上下文和依赖性注入 (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" );
}
}