我正在嘗試遵循重用最佳實踐的代碼。 我有一些常用的方法一般DAO接口:生成服務圖層類
public interface DaoInterface<T> {
T findById(int id);
//...more methods...
}
及其實現類:
public class GenericDao<T> implements DaoInterface<T> {
@SuppressWarnings("unchecked")
private final Class<T> persistentClass = (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
@Autowired
protected SessionFactory sessionFactory;
@Override
@SuppressWarnings("unchecked")
public T findById(int id) {
Session session = sessionFactory.getCurrentSession();
return (T) session.get(persistentClass, id);
}
//...more methods...
}
然後我的每一個具體的實現類擴展GenericDao
並實現其接口。
我在我的應用程序中也有服務層。一些服務的方法完全將他們的工作委託給DAO類。所以在每個具體的Service實現中,我會自動裝入合適的DAO類並調用它的方法。 所以現在看起來:
public interface CustomerService {
Customer findById(int id);
}
和實施:
@Service
@Transactional(readOnly = true, rollbackFor = Exception.class)
public class CustomerServiceImpl implements CustomerService {
@Autowired
private CustomerDao customerDao;
@Override
public Customer findById(int id) {
return customerDao.findById(id);
}
}
我的問題是 - 如何在泛型化的方式相同DAO類服務?所以,我的具體類的外觀:
public class CustomerServiceImpl extends GenericService<Customer> implements CustomerService {
.....
}
的問題是,我不能自動裝配在通用服務DAO類:
@Autowired
private GenericDao<T> dao;
,這樣我可以打電話給dao
的方法。 我應該在構造函數中完成它嗎?
還有一個問題 - 哪裏是註釋方法與@Transactional
- 在泛型類或每個實現類中的正確位置?
有太多可能的答案,或者對這種格式太好的答案太長。請添加詳細信息以縮小答案集或隔離幾個段落中可以回答的問題。 –
主要問題是如何在'GenericService'類中自動裝入類型爲''的'GenericDao'? –
DimaSan