Spring注解注入的问题,看能解决吗? 三层构架ACTION->SERVICE->DAO //这个类不注册为service,继承用 public class BaseService{ public void save(T entity) { baseHibernateDAO.saveOrUpdate(entity); } }
//这个类不注册@Repository,继承用 public class BaseHibernateDAO extends HibernateDaoSupport { public <T> void saveOrUpdate(Object entity) { getHibernateTemplate().saveOrUpdate(entity); } } //继承的SETVICE,注册为@Service public class UserService extends BaseService{ @Autowired public UserDAO userDAO; //空的,直接继承父类的save方法 } //继承的DAO,注册@Repository public class UserDAO extends BaseHibernateDAO { //空的,直接继承父类的saveOrUpdate方法 } 因为Autowired是byType的,这样我ACTION调用UserService 的save,save在调用DAO中的saveOrUpdate方法,实际上最终调用到的是UserDAO继承的saveOrUpdate,这样我就可以实现userAction-》userService-》userDAO的调用,userDAO必要时也可以重写父类方法。但这样我在再写一个如deptDAO继承BaseHibernateDAO 的时候在用Autowired就是报错,因为byType认为userDAO和deptDAO是一个类型。 如果我用byName如@Autowired@Qualifier("baseHibernateDAO")方式,因为baseService需要调用BaseHibernateDAO中的方法,我需要注册BaseHibernateDAO,然后设置baseService以byName方式调用BaseHibernateDAO,但这样userAction-》userService-》userDAO(子类DAO也使用ByName方式)调用时实际上是调用BaseHibernateDAO中的saveOrUpdate,即使userDAO重写saveOrUpdate,也不会再调用userDAO中的方法。