Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何获得一个crudepository实例?_Java_Spring_Spring Boot_Spring Data Jpa_H2 - Fatal编程技术网

Java 如何获得一个crudepository实例?

Java 如何获得一个crudepository实例?,java,spring,spring-boot,spring-data-jpa,h2,Java,Spring,Spring Boot,Spring Data Jpa,H2,最近,我一直遵循以下指南,介绍如何使用Spring Boot在内存H2数据库中持久化数据: 指南: 源代码: 在其中,首先定义一个CustomerEntity类,然后定义一个CustomerRepository接口。然后,在主类中,进行了大量的注释魔术,这使我们能够简单地“拥有”一个CustomerRepository实例,该实例可用于将数据持久化到数据库,检索数据,等等 这很好,但是,我需要在主类之外的另一个类中使用这样一个CustomerRepository实例。由于本教程没有揭示使它在

最近,我一直遵循以下指南,介绍如何使用Spring Boot在内存H2数据库中持久化数据:

  • 指南:
  • 源代码:
在其中,首先定义一个
CustomerEntity
类,然后定义一个
CustomerRepository
接口。然后,在主类中,进行了大量的注释魔术,这使我们能够简单地“拥有”一个
CustomerRepository
实例,该实例可用于将数据持久化到数据库,检索数据,等等

这很好,但是,我需要在主类之外的另一个类中使用这样一个
CustomerRepository
实例。由于本教程没有揭示使它在主类中可用的魔力,我不知道如何在我需要它的类中实现它

我几乎一整天都在试图弄明白这一点,但我只是在一大堆文章中迷失了方向,这些文章都在试图解释哪个Spring注释做了什么,我现在真的筋疲力尽了

我想这样做:

public class Foo {

  private CustomerRepository repo;

  // ...

  public void storeCustomer(String firstName, String lastName) {
    this.repository.save(new Customer(firstName, lastName));
  }

}
我很乐意得到一些提示。

这里有一个例子

@Component
public class Foo{

  @Autowired
    private CustomerRepository repo;

  // ...

  public void storeCustomer(String firstName, String lastName) {
    this.repository.save(new Customer(firstName, lastName));
  }

}
如果需要尝试,可以使用“CommandLineRunner”

@Bean
public CommandLineRunner myRunner(Foo myFooService){

  myFooService.storeCustomer("name","lastname");

}

您需要自动连接CustomerRepository对象,还需要从控制器自动连接Foo对象Foo对象

public class Foo {

@Autowire
private CustomerRepository repo;

  public void storeCustomer(String firstName, String lastName) {
  this.repo.save(new Customer(firstName, lastName));
  } 
}
您需要将Foo对象从controller/restcontroller自动连接到调用storeCustomer方法

@Controller
public class CustomerController{

  @Autowired
  Foo obj;
  @RequestMapping(method=RequestMethod.GET,value="addNewCustomer")
   public String addnewCustomer(){      
      obj.storeCustomer("firstname","lastname");
      return "";

   }
}
并使用@Configuration在任何类中定义自动连线bean

@Configuration
public class AppConfig {
  @Bean
  public Foo obj(){
      return new Foo();
  }
  @Bean
  public CustomerRepository repo(){
      return new CustomerRepository();
  }
}

您需要通过使用@Component对Foo进行注释,然后在customerrepository字段上使用@Autowired,将Foo变成一个spring管理的bean。Spring依赖注入:-)非常感谢您的帮助!然而,当我调用
storeCustomer
时,我得到一个
NullPointerException
。@dwightschrute您的包结构是什么样子的?默认情况下,SpringBoot将从您定义的@SpringBootApplication开始递归地查看包。因此,请确保包含Foo的包是主类的子类。实际上没有包结构,所有源文件都是根目录中的同级
Application.java
有一个用
@SpringBootApplication
注释的main方法,
Foo.java
在同一个包中。包怎么可能是类的子类?