spring 接口上未使用Sping Boot @Component 注解,但仍为Bean提供@Autowired

jq6vz3qz  于 2022-11-28  发布在  Spring
关注(0)|答案(1)|浏览(234)

我是春 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是如何被传递的。

jtjikinw

jtjikinw1#

Sping Boot 使用@EnableJpaRepositories,它是扩展/实现Spring Data repository的所有接口/类。
由于MongoRepository是spring JPA存储库,扩展接口将被拾取并作为可自动连接的依赖项提供。因此,当您使用@Component注解PostRepository时,spring将拾取两次,从而导致发现多个bean异常。
有关此主题的详细信息,请查看baeldungdocs

相关问题