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}")
这样,别人就可以通过#{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的引入(请参考消息总线)等高级用法,此问题会在后续版本中予以改善。 |
||
| [上一页] [下一页] | ||
LiteBean的声明
@Accessible
private String name;
}