我正在阅读Spring Dao教程。我在 DaoImplementation 类中看到了@Repository
注释。
我知道所有的数据库访问逻辑都应该写在这里。但是我无法理解
以下几点。
找到@Repository
时春天做了什么?我从Spring文档中得到了以下句子。
这样注释的类符合Spring DataAccessException 转换的条件。那这个是什么意思?
谁能举个例子?
如果宣布@Repository
,@Autowire
应该与此一起完成?
spring会自动将sessionfactory注入此类吗?
答案 0 :(得分:0)
Spring docs说
@Repository注释是满足存储库的角色或构造型(也称为数据访问对象或DAO)的任何类的标记。该标记的用途是自动翻译例外。
在DAO中使用Hibernate,JPA或JDO时,必须决定如何处理持久性技术的本机异常类。 DAO根据技术抛出HibernateException,PersistenceException或JDOException的子类。这些异常都是运行时异常,不必声明或捕获。您可能还必须处理IllegalArgumentException和IllegalStateException。这意味着调用者只能将异常视为致命异常,除非他们希望依赖于持久性技术自身的异常结构。如果不将调用者与实现策略联系起来,则无法捕获诸如乐观锁定失败之类的特定原因。对于强烈基于ORM和/或不需要任何特殊异常处理的应用程序,这种权衡可能是可接受的。但是,Spring允许通过@Repository注释透明地应用异常转换:
如果声明了@Repository,那么@Autowire应该与此一起完成吗? spring会自动将sessionfactory注入此类吗?
Spring不会自动注入SessionFactory,除非您将其声明为autowiring bean或您的DAO派生自
org.springframework.data.jpa.repository.JpaRepository
并非强制要求每个
@Repository
都必须使用@Autowired
sessionFactory声明,您可以拥有自己的单例实现来实例化SessionFactory
并控制注入它。但不建议这样做。