У меня есть страница с таблицей данных, которая считывает данные из класса обслуживания.Предполагается, что этот класс обслуживания вводится с помощью 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>