Java 我们给spring注释起个名字有什么原因吗?

Java 我们给spring注释起个名字有什么原因吗?,java,spring,spring-mvc,annotations,Java,Spring,Spring Mvc,Annotations,我注意到,当使用spring或SpringMVC的注释时,一些程序员给注释起了一个名字。例如: @Repository("customerRepository") public class CustomerRepositoryImpl implements CustomerRepository{ } 我相信这个类在没有给@Repository一个名称的情况下运行相同的功能。是否会出现将注释命名为有用的情况?如果自动检测到,则将实体转换为Springbean会有所帮助 从官方文件: 该值可能表示

我注意到,当使用spring或SpringMVC的注释时,一些程序员给注释起了一个名字。例如:

@Repository("customerRepository")
public class CustomerRepositoryImpl implements CustomerRepository{
}

我相信这个类在没有给
@Repository
一个名称的情况下运行相同的功能。是否会出现将注释命名为有用的情况?

如果自动检测到,则将实体转换为Springbean会有所帮助

从官方文件:

该值可能表示对逻辑组件名称的建议, 在自动检测组件的情况下转换为SpringBean


它主要用于在执行自动扫描和使用时解决歧义。我给出了一个详尽的答案,解释了
@Autowired
,其中还解释了命名bean的必要性

假设我们有两个类实现了
CustomerRepository

@Repository
public class MyCustomerRepositoryImpl implements CustomerRepository {
}

@Repository
public class OtherCustomerRepositoryImpl implements CustomerRepository {
}
public class SomeClass {
  @Autowired
  private CustomerRepository customerRepository;
}
现在我们假设有一个类使用
@Autowired
注入
CustomerRepository

@Repository
public class MyCustomerRepositoryImpl implements CustomerRepository {
}

@Repository
public class OtherCustomerRepositoryImpl implements CustomerRepository {
}
public class SomeClass {
  @Autowired
  private CustomerRepository customerRepository;
}
在执行自动扫描时,您需要有一种方法来区分它们。否则Spring会抛出一个异常,说它无法判断应该注入哪个bean

因此,我们现在可以为每个实现添加一个逻辑名称:

@Repository("myRepository")
public class MyCustomerRepositoryImpl implements CustomerRepository {
}

@Repository("otherRepository")
public class OtherCustomerRepositoryImpl implements CustomerRepository {
}
现在,您可以帮助Spring解决歧义,如下所示:

public class SomeClass {
  @Autowired
  @Qualifier("myRepository")
  private CustomerRepository customerRepository;
}
负责为你的豆子取一个名字。如果您指定一个名称,那么您可以对bean名称使用不同的约定,而不是基于类名生成的约定

自动生成的bean名称不是傻瓜式的;具有相同名称的两个类可能导致重复的bean定义,继承相同接口的两个类也可能导致重复的bean定义

使用显式名称还可以确保代码重构不会隐式中断bean连接