我有一个带有从服务类读取数据的数据表的页面。假设该服务类被注入了一个contactDAO,但它不会立即被注入。事实上,当页面第一次加载时,数据表是空的,因为 DAO 还没有被注入。但是,如果我调用 addContact(),则“联系人”列表会更新得很好,因为此时会注入 contactDAO。
如何确保在数据表需要使用服务类之前注入contactDAO?我正在使用 Spring 3 和 JSF 2.0。
带有数据表的页面绑定到列表“ contactServiceImpl.contacts
”:
<h:dataTable var="contact" value="#{contactServiceImpl.contacts}">
...
</h:dataTable>
我的 ContactServiceImpl 看起来像这样:
@Service
public class ContactServiceImpl implements ContactService {
private static List<Contact> contacts = new ArrayList<Contact>();
@Autowired
private static ContactDAO contactDAO;
private ContactServiceImpl() {
contacts = new ArrayList<Contact>();
//TODO: need to inject contactDAO at the same time as instantiation
contacts.clear();
try {
contacts.addAll( contactDAO.getContacts() );
} catch (Exception e) {
e.printStackTrace();
}
}
public void addContact(Contact contact) {
contacts.add(contact);
contactDAO.addContact(contact);
contacts.clear();
contacts.addAll( contactDAO.getContacts() );
}
@Autowired
public void setContactDAO(ContactDAO contactDAO) {
ContactServiceImpl.contactDAO = contactDAO;
System.out.println("DAO is injected");
}
}
和 applicationContext.xml
<bean id="contactServiceImpl" class="com.example.service.ContactServiceImpl"
scope="session">
<property name="contactDAO" ref="contactDAOImpl"/>
</bean>