作者:88250
Blog:http:/blog.csdn.net/DL88250
MSN & Gmail & QQ:DL88250@gmail.com
摘要
本文从 JSR 299 规范入手,整理并翻译了该规范中非常重要的概念,并结合一些短小的例子对 JSR 299 的使用进行了说明。文中略过了如何使用 XML 配置 bean,主要介绍使用标注(annotation)配置。
1. 绑定
1.1 定义新的绑定类型
@BindingType
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface Synchronous {}
@BindingType
@Retention(RUNTIME)
@Target({METHOD, FIELD, PARAMETER, TYPE})
public @interface Asynchronous {}
这里定义了两个绑定类型,@Synchronous 与 @Asynchronous,以后就可以使用它们定义 bean 了,这个定义步骤就是绑定。
对于类型安全解析算法而言,绑定类型的成员值是非常重要的:
@BindingType
@Retention(RUNTIME)
@Target({METHOD, FIELD})
public @interface PayBy {
PaymentMethod value();
}
1.2 绑定
这里使用上述的绑定类型进行两个 beans 的绑定:
@Synchronous
public class SynchronousPaymentProcessor
implements PaymentProcessor {
...
}
@Asynchronous
public class AsynchronousPaymentProcessor
implements PaymentProcessor {
...
}
这两个 bean 都实现了 PaymentProcessor 这个 bean 类型,在注入点就可以根据需要进行注入了:
@Synchronous PaymentProcessor paymentProcessor;
@Asynchronous PaymentProcessor paymentProcessor;
一个 bean 可以定义多个绑定类型:
@Synchronous @Reliable
public class SynchronousReliablePaymentProcessor
implements PaymentProcessor {
...
}
1.3 缺省绑定 缺省绑定可以使用 @Current:
@Current
public class Order {}
等价于
public class Order {}
在注入时,
public class Order {
public Order(@Current OrderProcessor processor) { ... }
}
等价于
public class Order {
public Order(OrderProcessor processor) { ... }
}
2. 作用域 2.1 内建的作用域 2.1.1 @SessionScoped
该作用域被激活于任意的 servlet.service() 方法,并跨越任意 filter.doFilter() 方法。Session 上下文将被所有同一 HTTP servlet session 内的 servlet requests 所共享,在 httpSession.invalidate() 方法调用时销毁。
2.1.2 @RequestScoped
- 该作用域被激活于任意的 servlet.service() 方法,并跨越任意 filter.doFilter() 方法。Request 上下文将在 servlet request 结束时被销毁,即在 sevlet.service() 方法与所有 filter.doFilter() 方法返回后
- 该作用域被激活于 Java EE web service 调用,并在该 web service 调用完成时销毁
- 该作用域被激活于任意的异步的观察者方法通知时,并在该通知结束完成时销毁
- 该作用域被激活于任意的 EJB 远程方法调用,并跨越任意 EJB 超时方法以及对于任意 EJB 消息驱动 bean 的消息递送。该上下文在远程方法调用完成、超时或消息递送完成时被销毁
- 该作用域被激活于任意的 servlet.service() 方法,并跨越任意 filter.doFilter() 方法
- 该作用域被激活于 Java EE web service 调用
- 该作用域被激活于任意的异步的观察者方法通知时
- 该作用域被激活于任意的 EJB 远程方法调用,并跨越任意 EJB 超时方法以及对于任意 EJB 消息驱动 bean 的消息递送
Application 上下文在同一应用中的所有 servlets、异步的观察者方法通知、web service 调用、EJB 远程方法调用、EJB 超时方法以及 EJB 消息驱动 bean 的消息递送执行所共享,在应用反部署时被销毁。该作用域可以看作是应用内的静态作用域。
2.1.4 @ConversationScoped
后续文章分析 :-)
2.1.5 @Dependent
后续文章分析 :-)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)