LiteBean

时至今日,Inversion of Control,Dependency Injection,等概念已经耳熟能详;Spring等IoC容器也大行其道;甚至于很多同学并没有真正理解到底什么是IoC以及它带给我们的意义, 但一个个的Spring用得倍熟。究其原因,是因为 Spring 为我们提供了许多便利,尤其是对象的创建与销毁。OperaMasks同样如此,你所需要的任何资源,只需要通过一个 @Inject 即可注入。在 OperaMasks 中,你可以注入以下资源:

java.util.logging.Logger
javax.faces.context.FacesContext
javax.faces.context.ExternalContext
javax.faces.application.Application
javax.faces.application.NavigationHandler

javax.el.ExpressionFactory
org.operamasks.faces.event.EventBroadcaster
org.apache.commons.logging.Log

举个简单的例子,如果你要使用 java.util.logging.Logger对象,那么,你只需要:

@Inject
private Logger logger

OperaMasks会根据对象类型自然判断出你需要注入的资源是什么。上例中,由于Logger是 java.util.longg.Logger,因此,OperaMasks会自动初始化 logger对象,然后你就可以拿着 logger 对象直接用了。

此外,你还可以在@Inject中指定EL表达式,OperaMasks会对该EL表达式求值,并将结果赋值给该属性,如:

@ManagedBean(name="testBean", scope=ManagedBeanScope.SESSION)
public class TestBean {

  @Inject("#{LiteBean.name}")
  private String name;

}

如果你希望上述属性能够被EL表达式所访问,那么,你就再加一个 @Accessible 的声明:

@ManagedBean
public class TestBean {

  @Inject("#{LiteBean.name}")
  1@Accessible
  private String name;

}

这样,别人就可以通过#{TestBean.name}访问该属性了。

同时,OperaMasks也支持JavaEE 5.0中规定的跟资源注入相关的 Annotation,如:

@Resource
@Resources
@EJB
@EJBs
@WebServiceRef
@WebServiceRefs
@PersistenceContext
@PersistenceContexts
@PersistenceUnit
@PersistenceUnits

假设我要注入一个数据源,那么,你可以这样:

@Resource(name="jdbc/MyDataSource")
DataSource ds;

需要提醒的是:在 OperaMasks 2.0中,如果需要在 LiteBean 中进行资源注入,必须要确保是基于IoVC创建的。换言之,直接在页面中通过EL表达式引入的LiteBean无法正确的进行资源注入、 MessageBus的引入(请参考消息总线)等高级用法,此问题会在后续版本中予以改善。

[上一页] [下一页]