我有两个类的bean - com.abc.MyClass
和com.xyz.MyClass
我在不同的班级中使用它们 -
@Component
public class Class1{
@Autowired
private com.abc.MyClass myClass;
...
}
和
@Component
public class Class2{
@Autowired
private com.xyz.MyClass myClass;
...
}
它给出了ConflictingBeanDefinitionException,因为bean名称与预期的“myClass”相同。我的疑问是,我该怎么做才能解决这个问题,按类型注入bean。
我尝试使用Resource
并强制执行类型 -
@Resource(type=com.xyz.MyClass)
private com.xyz.MyClass myClass;
但这也不起作用。仍然给出ConflictingBeanDefinitionException
答案 0 :(得分:0)
您可以使用@Qualifier(“beanName”)批注通过指定要映射的确切bean名称来解决冲突
答案 1 :(得分:0)
拇指规则绝不依赖于自动生成的名称。默认情况下,bean名称将是去大写的非限定类名。在你的情况下
class 1 -> com.abc.MyClass
class 2 -> com.xyz.MyClass
非限定类名是相同的(MyClass)所以在spring上下文中会有
class 1 -> myClass
class 2 -> myClass
上述情况不会发生,因为这些值必须是唯一的,因此您获得了ConflictingBeanDefinitionException
正如所指出的,@Component("name")
是解决问题的方法。
如果要检查自动生成的名称,bean可以实现BeanNameAware
接口,这是将bean名称传递给bean的容器回调。