2011年11月19日星期六

JavaEE_013:JavaEE6 新特性之四:Managed Beans 1.0

在JavaEE6之前,只有像EJB这样的重量级组件才可以被JavaEE容器管理,轻量级组件POJO类是不能被JavaEE容器管理的。
有了Managed Beans 1.0规范后,轻量级组件POJO类也可以被JavaEE容器管理。
该规范受JSF1.0规范(JavaEE5中的一个规范)中Managed Beans的启发。
于是在JavaEE6中,干脆把Managed Beans从JSF中独立出来,成为直接隶属于JavaEE6的规范之一。
而原来的EJB也就成了一种Managed Bean。

1. Managed Beans 1.0支持如下特性:
(1)资源注入:Injection (@Resource...)
(2)生命周期回调:Life-cycle (@PostConstruct, @PreDestroy)
(3)拦截器:Interceptor (@Interceptor, @AroundInvoke)
一个Managed Bean的基本代码如下:
@javax.annotation.ManagedBean
public class MyPojo {

@Resource
private Datasource ds;

@PostConstruct
private void init() {
....
}

@Interceptors(LoggingInterceptor.class)
public void myMethod() {...}
}

2. Managed Bean定义举例
(1)定义一个POJO类为Managed Bean
@javax.annotation.ManagedBean(value="mybean")
public class MyManagedBean {
...
}

(2)使用生命周期回调的Managed Bean
@javax.annotation.ManagedBean(value="mybean")
public class MyManagedBean {
@PostConstruct
public void setupResources() {
// setup your resources
System.out.println("Setting up resources ...");
}

@PreDestroy
public void cleanupResources() {
// collect them back here
System.out.println("Collecting them back ...");
}

public String sayHello(String name) {
return "Hello " + name;
}
}

3. 调用Managed Bean的方式举例
(1)使用@Resource元注释
@Resource
MyManagedBean bean;
(2)使用@Inject元注释
@Inject
MyManagedBean bean;
(3)使用JNDI
InitialContext ic = new InitialContext();
MyManagedBean bean = (MyManagedBean)ic.lookup("java:app/ManagedBean/mybean");

参考文献:
1. http://bbs.developersky.net/thread-66-1-1.html

没有评论: