我现在只学习Spring大约2周,并尝试了解Repository的概念,所以我仍然不熟悉许多术语,但是假设我上课,我会尽力进行解释:
产品.java
class Product {
...
...
}
接口ProductRepository.java
public interface ProductRepository {
public List<Product> getAllProducts();
}
InMemoryProductRepository.java
@Repository
class InMemoryProductRepository implements ProductRepository{
....
....
}
productController.java
class productController{
@Autowired
private ProductRepository productRepository;
@RequestMapping("/products")
public String list(Model model) {
model.addAttribute("products", productRepository.getAllProducts());
return "products";
}
}
在我所说的productController中,
productRepository
不能直接实现到诸如productRepository = new InMemoryProductRepository ();
之类的特定对象,而不是将productRepository
标记为@Autowired
,并且由于InMemoryProductRepository
具有@Repository
,因此InMemoryProductRepository
将被注入到该productRepository
引用中,但我的问题是,是否还有另一个实现此ProductRepository
接口并标记为@Repository
的类:假设像
InMemoryProductRepository2.java
@Repository
class InMemoryProductRepository2 implements ProductRepository{
....
....
}
然后将这两个对象之一注入
@Autowired
private ProductRepository productRepository;
?我该如何区分它们?
谢谢,对不起我的语言。
最佳答案
如果存在这种情况,则应为每个实现中的bean @Repository(“ name”)命名,并在@Autowired中使用@Qualifier(“ name”)批注。