繁体   English   中英

用于存储库的Spring DI(JAVA)

[英]Spring DI for Repository (JAVA)

我做一个测试Spring Controller应用程序->服务->存储库

控制器 - >

@RestController
public class HelloController {


@Autowired
private ProductServiceImpl productService;

    @RequestMapping("/getAll")
    public List getAll(){
        return productService.getAll();
    }
}

服务->

@Service
public class ProductServiceImpl implements Services.ProductService {

    @Autowired
    private ProductRepository productRepository;


    @Override
    public List<Product> getAll() {
        return productRepository.findAll();
   }
}

仓库->

@Repository
public interface ProductRepository extends JpaRepository<Product,Long> {
}

应用->

@SpringBootApplication
@EnableJpaRepositories("Repository")
@ComponentScan("com.lopamoko")
public class CloudliquidApplication {

    public static void main(String[] args) {
        ApplicationContext ctx = SpringApplication.run(CloudliquidApplication.class, args);

        String[] beanNames = ctx.getBeanDefinitionNames();
        Arrays.sort(beanNames);
        for (String beanName : beanNames) {
            System.out.println(beanName);
        }
    }

我正在尝试在控制器中执行@Autowired private ProductServiceImpl productServiceImpl; -他发誓没有豆子。 -我在Application Bean中进行操作-它开始发誓,现在无法从Service调用它为ProductRepository(接口)找到Bean。 如何为接口制作bean?

我认为您的问题出在@EnableJpaRepositories的值上,这可能会误导人们,并且它指向错误的包? @EnableJpaRepositories的值表示要扫描存储库的基本软件包。

如果ProductRepository以“ com.lopamoko”开头,则可以将该值保留为空。

@SpringBootApplication
@EnableJpaRepositories
@ComponentScan("com.lopamoko")
public class CloudliquidApplication {

public static void main(String[] args) {
    ApplicationContext ctx = SpringApplication.run(CloudliquidApplication.class, args);

    String[] beanNames = ctx.getBeanDefinitionNames();
    Arrays.sort(beanNames);
    for (String beanName : beanNames) {
        System.out.println(beanName);
    }
}

因为您已经指定了要在@ComponentScan("com.lopamoko")内部进行扫描的软件包

如果您的存储库位于其他软件包中,则需要将软件包指定为@EnableJpaRepositories的值

@SpringBootApplication
@EnableJpaRepositories("com.repository")
@ComponentScan("com.lopamoko")
public class CloudliquidApplication {

public static void main(String[] args) {
    ApplicationContext ctx = SpringApplication.run(CloudliquidApplication.class, args);

    String[] beanNames = ctx.getBeanDefinitionNames();
    Arrays.sort(beanNames);
    for (String beanName : beanNames) {
        System.out.println(beanName);
    }
}

别忘了用JPA注释@Entity注释您的Product实体

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM