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