autowired - 何时使用 Spring 的 @Repository 注解?
问题描述
在阅读有关在 Spring 中创建自定义查询时,我注意到没有一个类(UserRepositoryCustom
、UserRepositoryCustomImpl
、UserRepository
)使用@Repository
注释。
我对此感到惊讶,因为通常所有 Spring 应用程序类都被注释了一些东西,以便它们被检测到并为它们生成一个代理。这就是面向方面的框架在 Java 中的工作方式。
然后我检查了我的旧工作代码,并意识到我的存储库接口也没有使用注释。然而,它是@Autowired
对使用它的控制器和其他类的依赖。例子:
// AddressRepository.java
public interface AddressRepository extends CrudRepository<Address, String> {
}
// Repositories.java
@Getter // lombok
@Component
public class Repositories { // autowire this to have access to all repo's
private final AddressRepository addressRepository;
@Autowired
public Repositories(AddressRepository addressRepository) {
this.addressRepository = addressRepository;
}
}
这就引出了一个问题:什么时候应该使用注释?Spring的组件扫描如何自动检测到非注释类?
解决方案
它为所有使用@Repository 注释的bean 激活持久性异常转换,以让JPA 持久性提供程序抛出的异常转换为Spring 的DataAccessException 层次结构。
这意味着该类中抛出的所有未经检查的异常都将转换为 DataAccessException。
https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repositories.create-instances
推荐阅读
- spring-boot - 在集成测试中注入存储库依赖项是不好的做法
- arduino - 在#define 内相乘会给出奇怪的值
- pytorch - 如何剥离预训练网络并使用 pytorch 闪电添加一些层?
- microsoft-teams - 响应调用时正文始终为空
- javascript - 除非我刷新页面,否则猫头鹰轮播不起作用
- json - 无法在本地连接到远程服务器
- php - Yii2: 如何获取 $this 的属性?
- r - R) 来自“Large vtcrs_list_of”的嵌套列表的汇总维度表
- bash - 在 rm 命令期间,通过管道传输到 bash 的脚本无法扩展 glob
- python - 如何在数据框中创建新列来处理溢出行?