我有一個關於這個服務和它的DAO對象如何執行持久性事務的問題。Java DAO對象事務
服務在數據庫上執行事務 - 但它不使用DAOImpl對象 - 它使用的是一個對象,它是接口的一個實例 - 並且自然沒有任何方法簽名的實現。在我看來,這不應該能夠執行任何有意義的行動。我在這裏忽略了什麼嗎?
全部鏈接到代碼
http://www.byteslounge.com/tutorials/spring-with-hibernate-persistence-and-transactions-example
@Service
public class UserManagerImpl implements UserManager {
@Autowired
private UserDAO userDAO;
@Override
@Transactional
public void insertUser(User user) {
userDAO.insertUser(user);
}
@Override
@Transactional
public User getUserById(int userId) {
return userDAO.getUserById(userId);
}
@Override
@Transactional
public User getUser(String username) {
return userDAO.getUser(username);
}
@Override
@Transactional
public List<User> getUsers() {
return userDAO.getUsers();
}
}
public interface UserDAO {
void insertUser(User user);
User getUserById(int userId);
User getUser(String username);
List<User> getUsers();
}
@Service
public class UserDAOImpl implements UserDAO {
@Autowired
private SessionFactory sessionFactory;
@Override
public void insertUser(User user) {
sessionFactory.getCurrentSession().save(user);
}
@Override
public User getUserById(int userId) {
return (User) sessionFactory.
getCurrentSession().
get(User.class, userId);
}
@Override
public User getUser(String username) {
Query query = sessionFactory.
getCurrentSession().
createQuery("from User where username = :username");
query.setParameter("username", username);
return (User) query.list().get(0);
}
@Override
@SuppressWarnings("unchecked")
public List<User> getUsers() {
Criteria criteria = sessionFactory.
getCurrentSession().
createCriteria(User.class);
return criteria.list();
}
}
你忽略了Java的基礎知識(以及一些Spring)。顯然在運行時注入了'UserDAO'的具體實現。 – Kayaman
謝謝你的回覆。是的,我在春天還很綠。你在這裏指的是依賴注入?這是通過@autowire註釋和xml配置文件進行管理的嗎? – Jnanathan
在這種情況下(使用@Autowired),可能沒有xml配置,而是Java配置。一個合適的bean將在運行時注入'userDAO',否則會拋出錯誤。 – Kayaman