【问题标题】:how annotation @Repository in java spring work? [duplicate]java spring 中的注解@Repository 是如何工作的? [复制]
【发布时间】:2019-05-16 15:13:41
【问题描述】:

我有这样的代码:

存储库

@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 是一个接口,对吧?

【问题讨论】:

  • 您的意思是 Spring Data JPA 是如何工作的?见stackoverflow.com/q/15571608/217324。 Repository 注释将其标记为组件并提供异常翻译,请参阅stackoverflow.com/q/12204035/217324
  • 这里有点不同。 EquipmentRepository 是一个接口。那么,为什么我可以调用 EquipmentRepository 的方法。实现 EquipmentRepository 的类在哪里。
  • 在这种情况下,@Repository 是无用的。因为它是 Spring Data JPA 检测 Repository 的扩展(接口而不是注释)以动态创建 JPA 实现。

标签: java spring


【解决方案1】:

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

实现传统 Java EE 模式(例如“数据访问”)的团队 Object" 也可以将此构造型应用于 DAO 类,但要小心 应该理解数据访问之间的区别 这样做之前的对象和 DDD 样式的存储库。这个注解是 通用的刻板印象和个别团队可能会缩小他们的 语义并酌情使用。

这样注释的类符合 Spring DataAccessException 与 a 结合使用时的翻译 PersistenceExceptionTranslationPostProcessor。带注释的类是 还阐明了其在整个应用程序架构中的作用 用于工具、方面等的目的。

来源:JavaDoc

但在您的情况下,您还扩展了 Spring Data JPA 的 JpaRepository。 Spring Data 自动提供常见 CRUD 操作的实现。 JpaRepository 扩展了接口 CrudRepository,该接口具有为所有基本 crud 操作声明的方法。

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

定义这个接口有两个目的:

  • 首先,通过扩展JpaRepository,我们得到了一堆通用的CRUD 方法进入我们的类型,允许保存设备,删除它们和 以此类推。
  • 其次,这将允许 Spring Data JPA 存储库基础架构 扫描这个接口的类路径并创建一个 Spring bean 它。

@EnableJpaRepositories 扫描com.acme.repositories 下的所有包以查找扩展JpaRepository 的接口,并为其创建一个由SimpleJpaRepository 实现支持的Spring bean(spring 数据通过此类提供CRUD 存储库的默认实施) .

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

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

【讨论】:

    猜你喜欢
    • 2023-03-25
    • 2020-09-10
    • 2011-04-01
    • 2015-09-29
    • 2013-03-09
    • 1970-01-01
    • 2019-09-07
    • 2021-03-10
    相关资源
    最近更新 更多