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中的方法。
问:有办法实现service层继承自baseService的方法,最终调用DAO层继承自BaseHibernateDAO的方法吗?
[解决办法]
你的Autowired是byName的
[解决办法]
用@Resource,好点
[解决办法]
http://blog.csdn.net/penngo/article/details/6038991
有个DEMO,LZ可以看看
[解决办法]