Java 为什么Spring3@Component名称在有不同的包时会发生冲突?

Java 为什么Spring3@Component名称在有不同的包时会发生冲突?,java,spring,spring-annotations,spring-bean,Java,Spring,Spring Annotations,Spring Bean,我有两门课: package package1; @Component public class MyClass1 { ... package package2; @Component public class MyClass1 { ... 当我运行failsafe(在maven中)-我在spring中得到以下错误(我在surefire中没有得到): 及 或者我甚至可以将包扫描设置为仅package1 (有三种方法可以解决这个问题,但这不是我的问题) 这不是我要问的。(这不是复制品) 现

我有两门课:

package package1;

@Component
public class MyClass1 {
...

package package2;

@Component
public class MyClass1 {
...
当我运行failsafe(在maven中)-我在spring中得到以下错误(我在surefire中没有得到):

或者我甚至可以将
包扫描设置为仅
package1

(有三种方法可以解决这个问题,但这不是我的问题)

这不是我要问的。(这不是复制品)

现在对我来说,只有当它们具有相同的包名时,才应该在春季发生冲突。如果他们有不同的软件包,Spring肯定会给他们起不同的简称


我的问题是:为什么Spring 3@组件名称在不同的包中会冲突?

据我所知,Spring默认的bean命名方案如下(请参阅)

包名被剥离,第一个字符被小写。我所知道的唯一方法是使用
@Component
的可选
,或者通过
beans.xml
@Bean
注释的配置方法(或者可能实现您自己的
BeanNameGenerator
)手动命名Bean

需要注意的是,内部类将保留其外部类的名称作为bean名称的一部分,因为使用了类shortname,例如:

package1.MyClass1.MyInnerClass -> myClass1.MyInnerClass

这在按名称自动关联时可能会导致问题,因为bean名称包含句点。

如果没有明确的名称规范,检测到的bean将获得从其类名称派生的默认名称,而没有包名称,因此将创建两个具有相同名称的bean,这将引发异常

如果有多个具有相同名称的类,则应为每个
@组件指定不同的名称

@Component(name="MyClass1a")
@Component(name="MyClass1b")
package1.MyClass1 -> myClass1
package2.MyClass1 -> myClass1
package1.MyClass1.MyInnerClass -> myClass1.MyInnerClass