[英]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.