我有这样一个代码:
存储库
@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存储库负责将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> { … }
定义此接口有两个目的:
@EnableJpaRepositories
扫描com.acme.repositories
下面的所有包,寻找扩展JpaRepository
的接口,并为其创建一个Spring bean,该bean由SimpleJpaRepository
的实现支持(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给了我一个警告: 我尝试将这些注释添加到中,但没有一个成功: 但都不管用。显然有些是错的,但我在试验。正确的注释是什么。 使用,我得到了以下错误: