当前位置: 首页 > 知识库问答 >
问题:

java Spring中的注释@存储库如何工作?[重复]

张通
2023-03-14

我有这样一个代码:

存储库

@Repository
public interface EquipmentRepository extends JpaRepository<Equipment, Integer>{

Equipment findById(int id);
}

服务

@Service
public class EquipmentServiceImpl implements EquipmentService {

@Autowired
EquipmentRepository equipmentRepository;

@Override
public Equipment findById(int id) {
    return equipmentRepository.findById(id);
   }
}

我想知道为什么我可以调用“interface EquipmentRepository”方法。EquipmentRepository是一个接口,对吗?

共有1个答案

伯晨
2023-03-14

Spring存储库负责将DAO导入DI容器,并将未检查的异常放入Spring中。Spring存储库注释使用@组件注释进行元注释,以便存储库类将用于组件扫描。

实现传统JavaEE模式(如“数据访问对象”)的团队也可以将这种原型应用于DAO类,但在此之前应注意了解数据访问对象和DDD样式存储库之间的区别。此注释是通用原型,各个团队可能会根据需要缩小语义学和使用范围。

当与PersistenceExceptionTranslationPostProcessor结合使用时,这样注释的类有资格进行Spring数据访问异常(DataAccessException)转换。注释类还阐明了其在整个应用程序体系结构中的作用,以实现工具、方面等目的。

来源:JavaDoc

但在您的例子中,您还扩展了Spring数据JPA的JPA存储。Spring数据自动提供常见CRUD操作的实现。JpaRepository扩展了接口CrudRepository,该接口为所有基本crud操作声明了方法。

public interface EquipmentRepository extends JpaRepository<Account, Long> { … }

定义此接口有两个目的:

  • 首先,通过扩展JpaRepository,我们在我们的类型中得到了一系列通用CRUD方法,允许保存设备、删除设备等等
  • 其次,这将允许Spring数据JPA存储库基础设施扫描该接口的类路径,并为其创建Springbean

@EnableJpaRepositories扫描com.acme.repositories下面的所有包,寻找扩展JpaRepository的接口,并为其创建一个Spring bean,该beanSimpleJpaRepository的实现支持(Spring data通过此类提供CRUD存储库的默认输入)。

这就是为什么即使您还没有定义方法,您也可以通过此设置进行crud操作。

参考:https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.repositories

 类似资料:
  • 当我使用Spring Framework时,我使用Java注释将类标记为控制器,使用@Request estMap()等方法。我不知道哪个类阅读这些注释以及使用了什么技术。我在想Java反射。对吗?

  • 所以我知道通过这个注释: 此方法处理对URL/Orders表示的资源发出的GET HTTP请求。 此方法调用返回列表的DAO对象。 确保结果将由HTTP消息转换器(而不是MVC视图)写入HTTP响应。 也可以阅读Spring官方文档:http://docs.Spring.io/Spring/docs/current/javadoc-api/org/springframework/web/bind/

  • 问题内容: 我正在说一个例外: java.lang.IllegalArgumentException:需要’sessionFactory’或’hibernateTemplate’ 尝试在HibernateDaoSupport类上使用注释时。该错误消息很简单,为了创建存储库,它需要一个sessionFactory。但是,我在XML中定义了一个会话工厂: 因此,我不确定在创建注释驱动的bean时如何为

  • 问题内容: 我不喜欢抽象,但 我认为Spring犯了重罪。 但是,如果有人可以解释“自动”配置背后的算法,那么我这次愿意忽略它。 看看spring自己的javadocs,除了说它将智能地猜测您需要的东西以及对条件bean要做的事情之外,它没有什么其他的。 有人知道用于确定需要加载哪些算法的算法吗? 问题答案: 根据我作为Spring Boot用户的经验,Spring Boot决定要启用哪些自动配置

  • 我有一个实体类称为和一个仓库声明如下: 自定义存储库的定义如下: 和 下面是另一个堆栈溢出问题中描述的内容:如何向Spring数据JPA添加自定义方法 现在,IntelliJ给了我一个警告: 我尝试将这些注释添加到中,但没有一个成功: 但都不管用。显然有些是错的,但我在试验。正确的注释是什么。 使用,我得到了以下错误: