![](/img/trans.png)
[英]What's the difference between @Component, @Repository & @Service annotations in Spring?
[英]What's the difference between using a Service compared to using a repository? Spring Boot
这是两个例子。
示例 1:
使用Entity
、 Repository
和Service
创建一个 CRUD 数据库。 https://github.com/alejandro-du/crudui/tree/master/demo/src/main/java/org/vaadin/crudui/demo
代码的使用可以在这里展示: https://github.com/alejandro-du/crudui/blob/master/demo/src/main/java/org/vaadin/crudui/demo/ui/view/SimpleCrudView .java
在这里我们可以看到UserService userService
和GroupService groupService
被用于在 CRUD 数据库中存储值。
示例 2:
这是我使用@Autowired Repository
的示例
题:
使用Service Object
而不是使用@Autowired Repository
有什么区别
例子:
如果我在这里使用@Autowired Repository backend
,我可以在这里写入 CRUD 数据库。
crud.setCrudListener(new CrudListener<User>() {
@Override
public Collection<User> findAll() {
return backend.findAllUsers();
}
@Override
public User add(User user) {
return backend.add(user);
}
@Override
public User update(User user) {
return backend.update(user);
}
@Override
public void delete(User user) {
backend.remove(user);
}
});
如果我像这样使用服务 object。 我还可以写入 CRUD 数据库。
@Route(value = "simple", layout = MainLayout.class)
public class SimpleCrudView extends VerticalLayout {
public SimpleCrudView(UserService userService, GroupService groupService) {
// crud instance
GridCrud<User> crud = new GridCrud<>(User.class);
// grid configuration
crud.getGrid().setColumns("name", "birthDate", "maritalStatus", "email", "phoneNumber", "active");
crud.getGrid().setColumnReorderingAllowed(true);
// form configuration
crud.getCrudFormFactory().setUseBeanValidation(true);
crud.getCrudFormFactory().setVisibleProperties(
"name", "birthDate", "email", "salary", "phoneNumber", "maritalStatus", "groups", "active", "mainGroup");
crud.getCrudFormFactory().setVisibleProperties(
CrudOperation.ADD,
"name", "birthDate", "email", "salary", "phoneNumber", "maritalStatus", "groups", "active", "mainGroup",
"password");
crud.getCrudFormFactory().setFieldProvider("mainGroup",
new ComboBoxProvider<>(groupService.findAll()));
crud.getCrudFormFactory().setFieldProvider("groups",
new CheckBoxGroupProvider<>(groupService.findAll()));
crud.getCrudFormFactory().setFieldProvider("groups",
new CheckBoxGroupProvider<>("Groups", groupService.findAll(), Group::getName));
crud.getCrudFormFactory().setFieldProvider("mainGroup",
new ComboBoxProvider<>("Main Group", groupService.findAll(), new TextRenderer<>(Group::getName), Group::getName));
// layout configuration
setSizeFull();
add(crud);
crud.setFindAllOperationVisible(false);
// logic configuration
crud.setOperations(
() -> userService.findAll(),
user -> userService.save(user),
user -> userService.save(user),
user -> userService.delete(user)
);
}
}
IMO,当你在服务层工作时,你可以注入多个存储库,但如果你使用存储库,那么只有 1 个实体 object。
基本上只是 1 个实体 object 上的 CRUD,服务并没有太多优势。 但是当你从两个在业务逻辑上有某种联系的实体工作时,服务就更有意义了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.