2017-07-04 15 views
-1

中のエラーは、私は、単純なハードコードされたサービスと非常にシンプルな春のブートアプリケーションを持っているが、それは動作していないと、それは私にField userService in hello.UserController required a bean of type 'services.UserService' that could not be foundエラーを与えています。ここに私のアプリケーションクラス、コントローラ、サービスクラスがあります。私は@Autowired注釈経由UserServiceのを注入しようとすると問題があります。私はこれが既にどこかで答えられていると思うが、私は関連する答えを見つけることができない。私を助けてください、または正しい答えに私を指摘してください。おかげ必要なBeanがコントローラで見つからない - 依存性注入

コントローラ

@RestController 
@EnableAutoConfiguration 
@RequestMapping("/api") 

public class UserController { 

public static Logger logger = LoggerFactory.getLogger(UserController.class); 

@Autowired 
UserService userService; 

@RequestMapping(value = "/user/", method = RequestMethod.GET) 
public ResponseEntity<List<User>> listAllUsers() { 
    List<User> users = userService.getAllUsers(); 
    if(users.isEmpty()) return new ResponseEntity(HttpStatus.NO_CONTENT); 

    return new ResponseEntity<List<User>>(users,HttpStatus.OK); 
} 

}

アプリケーション

@SpringBootApplication(scanBasePackageClasses = 
{UserController.class}) 
@ComponentScan 
public class Application { 

public static void main(String[] args) { 
    SpringApplication.run(Application.class, args); 
} 

@Bean 
public CommandLineRunner commandLineRunner(ApplicationContext ctx) { 
    return args -> { 

     System.out.println("Let's inspect the beans provided by Spring Boot:"); 

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

    }; 
} 

} 

Serviceクラス

@Service 

public class UserService { 

List<User> users; 

public UserService() { 
    this.users = new ArrayList<>(); 
    users.add(new User(2, "Altaire", 23)); 
    users.add(new User(3, "Ezio", 21)); 
    users.add(new User(4, "Enzo", 23)); 
} 

public User getUser(int id) { 
    for (User user : users) { 
     if (user.getId() == id) { 
      return user; 
     } 
    } 
    return null; 
} 

public List<User> getAllUsers() { 
    return users; 
} 

public void addUser(User user) { 
    users.add(user); 
} 

public void deleteUser(int id) { 
    for (User user : users) { 
     if (user.getId() == id) { 
      users.remove(user); 
     } 
    } 
} 

public void updateUser(int id, String name, int age) { 
    for (User user : users) { 
     if (user.getId() == id) { 
      user.setName(name); 
      user.setAge(age); 
     } 
    } 
    } 
} 
+2

パッケージと輸入品も重要です。 – davidxxx

+0

サービスクラスは、モジュールという名前のサービスであるとコントローラとApplicationクラスは、(少なくとも、ではないJavaの9前)は、Javaでのモジュールのようなものはありません別のモジュール – Ezio

+1

です。なぜあなたはあなたがしなければならないことをやっていないのですか?そのパッケージとimport文を使ってコードを投稿してください。 –

答えて

0

アプリケーションクラスでは、あなたが

@SpringBootApplication(scanBasePackageClasses = 
{UserController.class}) 

を持っているあなたは、同様のサービスクラスを追加する必要があります:あなたもscanBasePackagesを使用して、例えば、明示的に分類されないだけででき

@SpringBootApplication(scanBasePackageClasses = 
{UserController.class,UserService.class}) 

注意を

@SpringBootApplication(scanBasePackage = {"com.x.y"}) 
+0

あなたがscanBasePackageClasses' 'で各Beanを宣言するために起動した場合、設定は本当にunmaintainableですし、スキャンの利益を失います。私はそれを見たscanBasePackages – davidxxx

+0

。しかし、全体としての主要な解決策として、最初の方法を提案すべきではありません。それは春の反パターンです。 –

+0

を使用することが提案理由です – davidxxx

関連する問題