我是春 Boot 的初学者,我们需要在Spring的类/接口上使用@Component
来将bean存储在Spring容器中。我们可以通过使用@Autowired
来注入bean。我一直在做一个演示项目,在这个项目中,我看不到接口上的@Component
,但不知何故,该接口的bean被正确提供了。如果我添加@Component
,它会显示找到多个bean。
后控制器类:
package com.ashik.jobmarket.controller;
import com.ashik.jobmarket.repository.PostRepository;
import com.ashik.jobmarket.model.Post;
import com.ashik.jobmarket.repository.SearchRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@CrossOrigin(origins = "http://localhost:3000")
public class PostController {
@Autowired
PostRepository repo;
@Autowired
SearchRepository srepo;
@GetMapping("/allPosts")
@CrossOrigin
public List<Post> getAllPosts(){
return repo.findAll();
}
@GetMapping("/posts/{text}")
@CrossOrigin
public List<Post> search(@PathVariable String text){
return srepo.findByText(text);
}
@PostMapping("/post")
@CrossOrigin
public Post addPost(@RequestBody Post post){
return repo.save(post);
}
}
发布存储库界面:
package com.ashik.jobmarket.repository;
import com.ashik.jobmarket.model.Post;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface PostRepository extends MongoRepository<Post, String>{}
没有实现发布资料档案库的类。
我试着自己添加@Component
,但是它说我有多个同名的bean。我试图理解这个过程,以及在没有@Component
注解的情况下bean是如何被传递的。
1条答案
按热度按时间jtjikinw1#
Sping Boot 使用
@EnableJpaRepositories
,它是扩展/实现Spring Data repository的所有接口/类。由于MongoRepository是spring JPA存储库,扩展接口将被拾取并作为可自动连接的依赖项提供。因此,当您使用
@Component
注解PostRepository
时,spring将拾取两次,从而导致发现多个bean异常。有关此主题的详细信息,请查看baeldung和docs