Spring @Repository注释的含义

时间:2015-11-12 13:32:33

标签: spring

我正在阅读Spring Dao教程。我在 DaoImplementation 类中看到了@Repository注释。 我知道所有的数据库访问逻辑都应该写在这里。但是我无法理解 以下几点。

  1. 找到@Repository时春天做了什么?我从Spring文档中得到了以下句子。 这样注释的类符合Spring DataAccessException 转换的条件。那这个是什么意思? 谁能举个例子?

  2. 如果宣布@Repository@Autowire应该与此一起完成? spring会自动将sessionfactory注入此类吗?

1 个答案:

答案 0 :(得分:0)

  1. 找到@Repository时Spring会怎么做?我从Spring文档中得到了以下句子。这样注释的类符合Spring DataAccessException转换的条件。那这个是什么意思?谁能举个例子?
  2. Spring docs

      
        

    @Repository注释是满足存储库的角色或构造型(也称为数据访问对象或DAO)的任何类的标记。该标记的用途是自动翻译例外。

             

    在DAO中使用Hibernate,JPA或JDO时,必须决定如何处理持久性技术的本机异常类。 DAO根据技术抛出HibernateException,PersistenceException或JDOException的子类。这些异常都是运行时异常,不必声明或捕获。您可能还必须处理IllegalArgumentException和IllegalStateException。这意味着调用者只能将异常视为致命异常,除非他们希望依赖于持久性技术自身的异常结构。如果不将调用者与实现策略联系起来,则无法捕获诸如乐观锁定失败之类的特定原因。对于强烈基于ORM和/或不需要任何特殊异常处理的应用程序,这种权衡可能是可接受的。但是,Spring允许通过@Repository注释透明地应用异常转换:

      
    1. 如果声明了@Repository,那么@Autowire应该与此一起完成吗? spring会自动将sessionfactory注入此类吗?

        
          

      Spring不会自动注入SessionFactory,除非您将其声明为autowiring bean或您的DAO派生自org.springframework.data.jpa.repository.JpaRepository

               

      并非强制要求每个@Repository都必须使用@Autowired sessionFactory声明,您可以拥有自己的单例实现来实例化SessionFactory并控制注入它。但不建议这样做。