使用 @SpringBootApplication 找不到 Bean

Val*_*tin 0 java compilation microservices

我在 JAVA 中遇到微服务问题。我不明白为什么我的代码不想编译。

我按照教程、视频(法语)创建一个简单的项目来熟悉微服务。

我创建了一个控制器、dao 和一个模型。当我编译控制器以访问 127.0.0.1.1port/Produits 时,它必须返回我在代码中定义的产品列表,但在编译时它显示我曾经有一只手:

“错误:在类中找不到方法main

“虽然正常启动项目我不需要手,因为它必须只是告诉我“好的,你可以去127.0.0.1/端口”(端口是在应用程序中定义的。属性并没有被占用)

这是我的项目的架构:

在此处输入图片说明

这是我要编译的控制器代码:

package com.ecommerce.microcommerce.controller;

import com.ecommerce.microcommerce.dao.ProductDao;
import com.ecommerce.microcommerce.model.Product;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
public class ProductController {

    @Autowired
    private ProductDao productDao;

    //Produits
    @GetMapping(value = "Produits")
    public List<Product> listeProduits() {
        return productDao.finAll();
    }

    //Produits/{id}
    @GetMapping(value = "Produits/{id}")
    public Product afficherUnProduit(@PathVariable int id) {
        Product product = new Product(1, new String("aspirateur"), 100);
        return product;
    }

}
Run Code Online (Sandbox Code Playgroud)

我的 DAO 中的文件:

package com.ecommerce.microcommerce.dao;

import com.ecommerce.microcommerce.model.Product;
import java.util.List;

public interface ProductDao {

    public List<Product> finAll();

    public Product finById(int id);

    public Product save(Product product);

}
Run Code Online (Sandbox Code Playgroud)
package com.ecommerce.microcommerce.dao;

import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.ecommerce.microcommerce.model.Product;

@Repository 
public class ProductDaoImpl implements ProductDao {

    public static List<Product> products = new ArrayList<>();

    static {
        products.add(new Product(1, new String("Ordinateur portable"), 350));
        products.add(new Product(2, new String("Aspirateur robot"), 500));
        products.add(new Product(3, new String("Table de ping pong"), 750));

    }

    @Override
    public List<Product> finAll() {
        return products;
    }
    @Override
    public Product finById(int id) {
        return null;
    }
    @Override
    public Product save(Product product) {
        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我的模型中的文件:

package com.ecommerce.microcommerce.model;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class MicrocommerceApplication {

    public static void main(String[] args) {
        SpringApplication.run(MicrocommerceApplication.class, args);
    }
}
Run Code Online (Sandbox Code Playgroud)
package com.ecommerce.microcommerce.model;

public class Product {

    private int id;
    private String name;
    private int prix;

    public Product(int id, String name, int prix) {
        this.id = id;
        this.name = name;
        this.prix = prix;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrix() {
        return prix;
    }

    public void setPrix(int prix) {
        this.prix = prix;
    }

    @Override
    public String toString() {
        return "Product [id=" + id + ", name=" + name + ", prix=" + prix + "]";
    }

}
Run Code Online (Sandbox Code Playgroud)

我看到很多人在其他帖子上有编译问题但没有回答我的问题

提前致谢,代码很长但很简单。我永远不知道我放的太多还是不够。我把一切。谢谢

Ris*_*wal 5

由于你的MicrocommerceApplication(主类)类和其他豆类ProductDaoImpl,并ProductController在不同的包,春天是无法发现它们。

@SpringBootApplication = @Configuration + @ComponentScan + @EnableAutoConfiguration

@SpringBootApplication注解相当于使用 @Configuration@EnableAutoConfiguration@ComponentScan与它们的默认属性:[...]

使用默认的@ComponentScan搜索当前包中的 bean

如果你想有一个自定义配置,提供自己的@Configuration@EnableAutoConfiguration@ComponentScan适当。

您的问题的解决方案:

  1. 您可以使用 hack 移动同一个包中的MicrocommerceApplication所有其他 Bean 。

  2. 代替@SpringBootApplication您可以使用:

    package com.ecommerce.microcommerce.model;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    
    @Configuration
    @EnableAutoConfiguration
    @ComponentScan({
                     "com.ecommerce.microcommerce.controller",
                     "com.ecommerce.microcommerce.dao"
                     "com.ecommerce.microcommerce.model"})
    public class MicrocommerceApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(MicrocommerceApplication.class, args);
        }
    }
    
    Run Code Online (Sandbox Code Playgroud)