[英]How is the Service recognized in the controller
我有一個 controller,它在 Spring 啟動時提供服務。
Controller是這樣的:
@Controller
@SessionAttributes("name")
public class TodoController {
private TodoService todoService;
public TodoController(TodoService todoService) {
super();
this.todoService = todoService;
}
@RequestMapping("list-todos")
public String showTodos(ModelMap model){
List<Todo> todos = todoService.findByUsername("Gerald");
model.addAttribute("todos", todos);
return "todoList";
}
還有這樣的服務
@Service
public class TodoService {
private static List<Todo> todos = new ArrayList<>();
static {
Todo todo1 = new Todo(1, "Gerald", "Learn Java", LocalDate.now().plusYears(1), false);
Todo todo2 = new Todo(2, "Gerald", "Learn Python", LocalDate.now().plusYears(2), false);
Todo todo3 = new Todo(2, "Gerald", "Learn OCaml", LocalDate.now().plusYears(3), false);
Todo todo4 = new Todo(2, "Gerald", "Learn Cooking", LocalDate.now().plusYears(4), false);
System.out.println(todo1);
todos.add(new Todo(1, "Gerald", "Learn Java", LocalDate.now().plusYears(1), false));
todos.add(new Todo(2, "Gerald", "Learn Python", LocalDate.now().plusYears(2), false));
todos.add(new Todo(3, "Gerald", "Learn Handstand", LocalDate.now().plusYears(3), false));
todos.add(new Todo(4, "Gerald", "Learn Cooking", LocalDate.now().plusYears(4), false));
}
public List<Todo> findByUsername(String name){
return todos;
}
public void addTodo(Todo todo){
todos.add(todo);
}
}
如果在 Controller 我有
@RequestMapping("list-todos")
public String showTodos(ModelMap model){
List<Todo> todos = this.todoService.findByUsername("Gerald");
model.addAttribute("todos", todos);
return "todoList";
}
為什么它也有效而不是我在那里:
List<Todo> todos = todoService.findByUsername("Gerald");
換句話說,controller 在沒有this
之前如何知道那個上下文中的 todoService 是什么?
如果本地scope中沒有這個名字的變量,但是有一個字段,編譯器會自己加上this
關鍵字。
備注:您應該了解 java 核心,因為 spring 做了很多復雜的事情,如果不了解 java,您可能會感到困惑。
如果表達式名稱由單個Identifier組成,則在 scope 中標識符出現的位置必須恰好有一個聲明表示局部變量、形式參數、異常參數或字段。 ...
因此,我們可以在沒有this
的情況下訪問實例字段(只要沒有與局部變量或參數的名稱沖突,那么this
需要用它來區分局部變量/參數和實例字段)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.