本处SSH指:Spring + SpringMVC + Hibernate
Spring版本:4.1.6
Hibernate本班:4.5.21、 由于之前dao层和service层一直都是在xml中配置依赖关系,所以在SpringMVC的配置文件中只配置自动扫描包时,只配置到了controller层。当有一天突然换为注解注入依赖关系时,SpringMVC的配置文件仍然按照以前那种方式配置,报错大致如下
@org.springframework.beans.factory.annotation.Autowired(required=true)这个错误的大致意思时无法扫描注解。其实这个错误很好解决,只不过第一个遇到比较纠结,解决办法如下:
在SpringMVC配置文件加入<context:component-scan base-package="这里是要扫描的包"/>
即可。2、今天将SSH框架由 xml 注入改为 注解注入时,service 注入 controller 是成功的,但 dao 注入 service 时一直提示 dao 为 null,纠结了好久,让同事来看也没解决。最终的解决办法是重新搭一次,第一次搭的是 xml 注入方式(基本都是从上个项目粘贴复制),然后再将 xml 改为注解发现神奇的好使了。
原因:可能是eclipse缓存或者tomcat缓存问题3、关于Spring4.X + Hibernate4.X 获取session的方式
3.1、xml注入获取方式
BaseDao.java
private SessionFactory sessionFactory;
public SessionFactory getSessionFactory() {
return sessionFactory;
}
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
/**
* @return session
*/
public Session getSession(){
// 需要开启事物才能得到CurrentSession
// 在commit或rollback后会自动关闭
// 注:如果使用openSession()方式创建session需要手动关闭
Session session = this.sessionFactory.getCurrentSession();
return session;
}
3.2、注解获取方式(这里需要特别说明一下:xml注入方式获取 SessionFactory 的方式在 注解注入方式中获取不到)
UserInfoDaoImpl.java
@Autowired
private SessionFactory sessionFactory;
/**
* @return session
*/
public Session getSession(){
Session session = this.sessionFactory.getCurrentSession();
return session;
}
这篇博客会持续更新中,每当跳坑了都会来更新的