第48月第20天 spring HibernateDaoSupport 注解
1.spring HibernateDaoSupport 注解
发现SqlSessionDaoSupport和HibernateDaoSupport是不一样的,前者有这样的一个方法
-
-
private void setSqlSessionFacoty(SqlSessionFacoty sqlSessionFacoty){
-
this.sqlSessionFacoty = sqlSessionFacoty;
-
}
而后者的方法是
-
public void setSessionFacoty(SessionFacoty sessionFactory){
-
this.sessionFactory = sessionFacoty;
-
}
后者是没有@Autowired的,所以spring是不会为继承HibernateDaoSupport的对象自动装配sessionFacotry的
那么如何解决这个问题就有很多途径了,比如你自己把HibernateDaoSupport的代码拷出来加个自动装配的注解,当做自己的实现。
最简单的方法,在BaseDao里加入一个方法
-
-
public void setMySessionFactory(SessionFactory sessionFactory){
-
super.setSessionFactory(sessionFactory);
-
}
spring会按照类型自动装配,所以方法名称可以随便写,这样就可以为子类的对象自动注入sessionFactory了。
为了不给没有用过零配置的同学耗费时间,把重要配置贴出来:
applicationContext.xml里配置如下
-
<!-- 自动扫描配置 -->
-
<context:component-scan base-package="com.dao"/>
https://blog.csdn.net/tsingheng/article/details/8847047
2.
PersonDaoImpl.java
@Repository(value="personDao") public class PersonDaoImpl extends HibernateDaoSupport implements PersonDao { @Autowired public void setMySessionFactory(SessionFactory sessionFactory){ super.setSessionFactory(sessionFactory); }
PersonServiceImpl.java
@Component(value = "personService") public class PersonServiceImpl implements PersonService { @Autowired private PersonDao personDao; public PersonDao getPersonDao() { return personDao; }
PersonAction.java
@Controller(value = "personAction") public class PersonAction extends ActionSupport{ private static final long serialVersionUID = 1L; @Autowired private PersonService personService;
applicationContext.xml
<!-- 自动扫描配置 --> <context:component-scan base-package="com.itheima.ssh"/>
3.使用hibernateTemplate
web.xml
<!-- 创建hibernateTemplate对象 --> <bean id="hibernateTemplate" class="org.springframework.orm.hibernate5.HibernateTemplate"> <!-- 注入sessionFactory对象 --> <property name="sessionFactory" ref="sessionFactory"></property> </bean>
4.
@Component:标注一个普通的Spring Bean类。如果不指定id,默认就该类的类名首字母小写作为id。
<bean id="" class=""/>(使用注解就不需要指定class了)
@Controller:标注一个控制器组件类。
@Service:标注一个业务逻辑组件类。
@Repository:标注一个DAO组件类。
—— 在Java EE应用中,使用这3个注解可能获得一些额外的好处。
@Scope – 指定Bean的作用域。
相当于scope属性。
@Resource -配置依赖注入( Spring借用了Java EE的Annotation)。
相当于ref属性,且该注解直接支持field注入。
https://blog.csdn.net/ack_finding/article/details/78877250