【问题标题】:What this declaration means in java?这个声明在java中意味着什么?
【发布时间】:2022-12-12 23:27:58
【问题描述】:

我是一名学生,并且是 Java 的新手,我制作了一个 MVC java 应用程序来使用简单的 React 前端练习一些 CRUD 和全栈。一切都很好,但我想准确了解代码上的声明是什么(我使用了一些在线指南)

这条线在这里

 private final RepositoryUsers repositoryUsers;

它正在实现接口,所以我可以访问它的方法?

这是我的控制器类

@CrossOrigin(origins = "http://localhost:3000")
@RestController
@RequestMapping("api/")
@Validated
public class ControllerUser {

    //this part here
    private final RepositoryUsers repositoryUsers;

    @Autowired
    public ControllerUser (reactboot.springbootreact.repositorio.RepositoryUsers repositoryUsers) {
        this.repositoryUsers = repositoryUsers;
    }

 
    @GetMapping("users")
    public List<User> getUsers(@RequestParam(name = "k", required = false) String keyword) {
        if (keyword == null) {
            return repositoryUsers.findAll();
        } else {
            return this.repositoryUsers.findAllByNomeLike(keyword);

        }
    }

我知道我们不能从接口创建对象,但是不应该在类声明中实现接口?

【问题讨论】:

  • “它正在实现接口,所以我可以访问它的方法?”不,它只是声明一个RepositoryUsers 类型的变量。它的实现是传递给ControllerUser 的构造函数的任何东西(可能是通过某种依赖注入框架?)
  • 模糊的标题。重写以总结您的具体技术问题。

标签: java spring model-view-controller interface controller


【解决方案1】:

该声明是说,“我持有一个对象,它是 RepositoryUsers 的某种实现。我不在乎什么实现类是,我可以通过接口与它交互。”

由于这是一个 Spring 应用程序,Spring 将注入控制器(在本例中是通过构造函数)它在应用程序上下文中找到的任何实现。有多种方法可以识别到 Spring RepositoryUsers 的实现来使用;一种典型的方法是注释实现接口的类,如下所示:

@Repository  // or @Component, if it's not really a repository
public class JDBCUsersRepository implements RepositoryUsers {
    // ... interface implementation ...
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-29
    • 2016-06-28
    相关资源
    最近更新 更多