如何在jsf bean中访问委托方法

时间:2013-05-11 07:49:40

标签: spring jsf jdbctemplate

我是jsf和spring概念的新手 我有一个xhtml页面,可以访问bean类中的自定义方法 我使用过Delegate(服务类)和Dao类 我的问题是来自bean类,我应该调用委托接口方法还是委托实现方法?

项目结构如下:

  • xhtml pages
  • bean abstract class
  • bean实现类(从bean抽象类扩展)
  • 委托接口类
  • 委托实施班
  • dao接口类
  • dao实现类

1 个答案:

答案 0 :(得分:1)

  

我应该调用委托接口方法还是委托实现方法?

当然可以同时做两件事,但依靠你避免在对象之间紧密耦合的界面。

将接口视为一般合同及其具体实现,将其视为包含合同所有细节的实例。

你可以想象一个简单的案例,那就是合同服务。您可以编写一个界面来强制所有实现仅遵循一种方法:getAllContacts。所以你的界面将是:

public interface ContactBookInterface {
    public List<Contact> getAllContacts ();
}

接口并不关心数据如何在内部存储或者来自何处等细节。所有这些细节都存在于实现中。您可以考虑两种实现:

public class ContactBookService implements ContactBookInterface {
    private ContactDAO contactDAO;
    ...
    public List<Contact> getAllContacts() {
        return contactDAO.findAll();
    }
}

public class ContactBookMockService implements ContactBookInterface {
    private List<Contact> contacts;
    public ContactBookMockService() {
        contacts = populateMockContacts();
    }
    ...
    public List<Contact> getAllContacts() {
        return contacts;
    }
}

现在,从程序的角度来看,您可以拥有以下托管bean:

@ManagedBean
...
public void ContactsBean {
    private ContactBookInterface cbi;
    ...
}

通过这样的设计,具体实现并不重要,并且将通过依赖注入正确的实现来处理。重要的是要注意,您并没有将自己与实现设计联系起来,并且您可以轻松地将您的实现替换为新实现,因为您的代码松散耦合