作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
您认为实现 JSF 2.0 托管 bean 实用程序方法的最佳方式是什么,例如:
public FacesContext getFacesContext() {
return FacesContext.getCurrentInstance();
}
public Flash getFlash() {
return getFacesContext().getExternalContext().getFlash();
}
public void addMessage(String clientId, String message) {
FacesMessage facesMessage = new FacesMessage(FacesMessage.SEVERITY_INFO, message,
message);
getFacesContext().addMessage(clientId, facesMessage);
}
我正在考虑作为抽象类或具有静态方法的普通类。
我的理解是,扩展类产生的对象会消耗更多内存,但大多数(几乎所有)它们都是请求范围的,因此一旦呈现响应就符合垃圾收集的条件。
我对最好的 OO 设计和对服务器的负担最少感兴趣。谢谢
最佳答案
My understanding is that object resulting from extending classes will consumes more memory
这不是真的。只有状态消耗更多内存。这些方法没有/使用额外的状态 - 这正是您可以使它们成为static
而不用担心线程安全问题的原因。
是的,您看到这确实可以通过两种主要方式解决:
将它们放在一个抽象类
中,您可以让所有托管 bean 扩展该类。
public class Bean extends BaseBean {
public void submit() {
addInfoMessage("Submit successful");
}
}
将它们放在一个实用类中,您最终可以通过 import static
导入它(不,不要将它与单例混淆,因为单例有状态,但实用类没有' t).
public class Bean {
public void submit() {
Jsf.addInfoMessage("Submit successful");
}
}
两者都是可以接受的,主要区别仅在于抽象类方式更易于通过测试框架进行模拟/测试,这可能是严格的业务需求。
关于java - JSF 实用程序类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5882954/
我是一名优秀的程序员,十分优秀!