首先我定义了GenericDao、GenericDaoImpl、GenericService、GenericServiceImpl,如下:
GenericDao:public interface GenericDao<T> {
 
    public void save(T entity);
    
    public void remove(T entity);
    
    public void modify(T entity);
    
}GenericDaoImpl:public class GenericDaoImpl<T> implements
GenericDao<T> {
private Class<T> type;
private HibernateTemplate hibernateTemplate;

public GenericDaoImpl(Class<T> type) {
this.type = type;
}
public GenericDaoImpl(){}

public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public HibernateTemplate getHibernateTemplate() {
return hibernateTemplate;
}
public void modify(T entity) {
hibernateTemplate.update(entity);
}
public void remove(T entity) {
hibernateTemplate.delete(entity);
}
public void save(T entity) {
hibernateTemplate.save(entity);
}
}GenericService:public interface GenericService<T> { public void save(T entity); public void remove(T entity); public void modify(T entity);

}GenericServiceImpl:public class GenericServiceImpl<T> implements
GenericService<T> {
private GenericDao<T> genericDao; public void modify(T entity) {
genericDao.modify(entity);
}
public void remove(T entity) {
genericDao.remove(entity);
}
public void save(T entity) {
genericDao.save(entity);
}
public void setGenericDao(GenericDao<T> genericDao) {
this.genericDao = genericDao;
}
}然后我定义了UserDao、UserDaoImpl、UserService和UserServiceImpl,分别继承自它们,如下:
UserDao:public interface UserDao extends GenericDao<User>{
public User findByNameExact(String uname);
}UserDaoImpl:public class UserDaoImpl extends GenericDaoImpl<User> implements UserDao { public UserDaoImpl(){
super(User.class);
} public User findByNameExact(String uname) {System.out.println("aa");
List<User> list = (List<User>) this.getHibernateTemplate().find(
"from User where userName = '"+uname+"'");
return (!list.isEmpty() && list.size() == 1) ? list.get(0) : null; 
}
}UserService:public interface UserService extends GenericService<User>{
public User exist(String userName);
}UserServiceImpl:public class UserServiceImpl  extends GenericServiceImpl<User> implements UserService{
private UserDao userDao;

public UserDao getUserDao() {
return userDao;
} public void setUserDao(UserDao userDao) {
this.userDao = userDao;
} public User exist(String userName) {
// TODO Auto-generated method stub
return userDao.findByNameExact(userName);
}}
此时我的spring配置文件应该怎么写才对?

解决方案 »

  1.   


    <beans>
    <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory" ref="sessionFactory" />
    </bean>

    <bean id="genericDao" abstract="true">
    <property name="hibernateTemplate" ref="hibernateTemplate" />
    </bean>

    <bean id="userDao" class="com.yourpackage.UserDaoImpl" parent="genericDao">
    </bean>
    </beans>
      

  2.   

    这个问题我解决了,需要在UserServiceImpl的setUserDao方法里添加一条语句
    public void setUserDao(UserDao userDao) {
            this.userDao = userDao;
            super.setGenericDao(userDao);
    }
    不然GenericService中的dao总是空
      

  3.   

    配置就按1楼配置的就可以。。
    但是我感觉GenericDaoImpl这个实现是不是有点问题 啊。
    我们在项目中的应用是需要获取到运行时类的信息,然后做操作...
      

  4.   

    请问 如一楼的那个配置那个genericDao怎么才能找打他自己那个类呢?你Class也没用配置
      

  5.   

    请问 如一楼的那个配置那个genericDao怎么才能找打他自己那个类呢?你Class也没用配置