第48月第20天 spring HibernateDaoSupport 注解

1.spring HibernateDaoSupport 注解

 

发现SqlSessionDaoSupport和HibernateDaoSupport是不一样的,前者有这样的一个方法

  1. @Autowired(required=false)
  2.  private void setSqlSessionFacoty(SqlSessionFacoty sqlSessionFacoty){
  3.         this.sqlSessionFacoty = sqlSessionFacoty;
  4.  }

而后者的方法是

  1. public void setSessionFacoty(SessionFacoty sessionFactory){
  2.      this.sessionFactory = sessionFacoty;
  3.  }


后者是没有@Autowired的,所以spring是不会为继承HibernateDaoSupport的对象自动装配sessionFacotry的

那么如何解决这个问题就有很多途径了,比如你自己把HibernateDaoSupport的代码拷出来加个自动装配的注解,当做自己的实现。

最简单的方法,在BaseDao里加入一个方法

  1.  @Autowired
  2.  public void setMySessionFactory(SessionFactory sessionFactory){
  3.       super.setSessionFactory(sessionFactory);
  4.  }

spring会按照类型自动装配,所以方法名称可以随便写,这样就可以为子类的对象自动注入sessionFactory了。

 

为了不给没有用过零配置的同学耗费时间,把重要配置贴出来:


applicationContext.xml里配置如下

    1.  <!-- 自动扫描配置 -->
    2.  <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

 

posted @ 2020-09-20 19:51  lianhuaren  阅读(149)  评论(0编辑  收藏  举报