1

私はクラスの2つの豆を持っています -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;
  ...
}

Bean 名が同じ「myClass」であるため、ConflictingBeanDefinitionException が発生します。私の疑問は、これを解決してタイプごとに Bean を注入するにはどうすればよいかということです。タイプを使用Resourceして強制してみました-

@Resource(type=com.xyz.MyClass)
private com.xyz.MyClass myClass; 

しかし、これもうまくいきませんでした。それでも与えるConflictingBeanDefinitionException

4

2 に答える 2

0

@Qualifier("beanName") アノテーションを使用して、マップする正確な Bean 名を指定することで競合を解決できます

于 2013-11-09T13:41:50.563 に答える
0

経験則では、自動生成された名前に依存することはありません。デフォルトの Bean 名は、非修飾クラス名の大文字を削除したものになります。あなたの場合

class 1 -> com.abc.MyClass
class 2 -> com.xyz.MyClass

修飾されていないクラス名は同じ(MyClass)なので、春のコンテキストでは

class 1 -> myClass
class 2 -> myClass

これらの値は一意である必要があるため、上記は発生しません。ConflictingBeanDefinitionException

指摘されて@Component("name")いるように、問題の解決策です。自動生成された名前を確認したい場合、Bean は、BeanNameAwareBean 名を Bean に渡すコンテナ コールバックであるインターフェイスを実装できます。

于 2013-11-10T12:00:01.403 に答える