私はgetBean("test")
春のgetbeanの大文字小文字の区別はありますか?
を使用する場合、私は
@Component
public class TEST {
}
のようなクラスはこのBeanをロードすることができますか?
私はgetBean("test")
春のgetbeanの大文字小文字の区別はありますか?
を使用する場合、私は
@Component
public class TEST {
}
のようなクラスはこのBeanをロードすることができますか?
getBean()
敏感場合である、しかし春は@Component
と@Bean
クラスのカスタム豆の命名戦略を使用しています。 4.10.5 Naming autodetected componentsを参照してください
成分がスキャンプロセスの一部として自動検出された場合、そのBean名が
BeanNameGenerator
戦略[...]によって生成されます。デフォルトでは、name
の値を含むSpringステレオタイプ注釈(@Component
、@Repository
、、および@Controller
)は、対応するBean定義にその名前を提供します。は、このような注釈には
name
値が含まれていない場合、または(などカスタムフィルタによって発見されたものなど)、他の検出されたコンポーネントに対して、デフォルトBean名ジェネレータはuncapitalized非修飾クラス名を返します。
そして4.12.4.5 Customizing bean namingを参照してください@Configuration
/@Bean
用:
デフォルトでは、設定クラスは、得られたBeanの名前として
@Bean
メソッドの名前を使用します。ただし、この機能は、name
属性で上書きすることができます。
に戻る。あなたのクラスは、Javaの命名規則(キャメルケースの名前)春は、Beanの珍しい名前を使用して、これは動作します、次のされていないので:
getBean("TEST")
しかし、あなたが期待される命名(@Component class Test { }
)を使用する場合は、小文字を使用する必要があります。識別子:あなたの名前が、より複雑な場合
getBean("test")
はまた、uncapitalizedキャメルケースの構文は(Spring documentationを引用し続けて)適用されます。
[...]以下の2つの成分が検出された場合たとえば、名前が
myMovieLister
とmovieFinderImpl
次のようになります。
@Service("myMovieLister")
public class SimpleMovieLister {
// ...
}
@Repository
public class MovieFinderImpl implements MovieFinder {
// ...
}
ありがとうTomasz。それは私の期待以上に複雑です。私のクラスが@ComponentクラスのTestTreeのようなものなら、getBean( "testTree")を使ってロードできますか? – user496949
@ user496949:正確に。実際には複雑ではありません。 'TestTree'型のクラスを保持する変数にはおそらく同じ名前を使用します。さらに、現在、静的に型付けされた 'getBean(TestTree.class)'を使用するべきです –
@Component
注釈が明示的に名前を与えられていない場合は、BeanのIntrospector.decapitalize()
メソッドを使用しますが、デフォルトでAnnotationBeanNameGenerator
を使用していますClassNameを使用してBeanの名前を取得します。通常、 "Test"のような名前のクラスは、それにbean名 "test"を与えます。しかし、好奇心decapitalize
有する:
これは通常 に大文字から小文字の最初の文字を変換する手段が、(異常な)特殊なケースで複数 一文字と第1および第2の両方の文字がある場合大文字で、 私たちはそれを残す。
あなたのclass TEST
は、Bean名TEST
を取得します。
このようなロードビーンを試しましたか? –