3

したがって、何らかの理由で、プロジェクトのBeanの半分は@Componentでマークされ、@ Autowiredアノテーションで@Componentとマークされた他のオブジェクトに注入され、残りの半分はappliciationContext.xmlBean宣言とrefBean値を持つプロパティで明示的に接続されます。

質問は、それらのxml Bean宣言で、@ Componentとマークされたオブジェクトの1つを注入できますか?もしそうなら、そのBean参照名は何になりますか?

例えば;

一部のクラスには、そのように注釈が付けられています。

@Component
public class BeanAImpl{ ... }

次に、applicationContext.xmlでは、他のクラスは注釈が付けられていないため、明示的に配線されます。

<bean id="beanB" class="com.myapp.BeanBImpl"></bean>

applicationContext.xmlに両方の「種類」のBeanを注入できますか?

<bean id="beanUser" class="com.myapp.BeanUserImpl">
    <property name="beanA">HOW_TO_GET_REF_TO_BEANA?</property>
    <property name="beanB"><ref bean="beanB"/></property>
</bean>
4

3 に答える 3

2

@Componentタイプのデフォルト名はBeanAImplですbeanAImpl。手動で宣言されたBeanの場合と同じように、XMLで使用できます(<property>構文を短くすることもできます)。

<property name="beanA" ref = "beanAImpl" />

または、名前を明示的に設定することもできます@Component("beanA")

于 2012-09-21T17:08:35.390 に答える
1

これがSpringの言うことです:

コンポーネントがスキャンプロセスの一部として自動検出されると、そのBean名は、そのスキャナーに認識されているBeanNameGeneratorストラテジーによって生成されます。デフォルトのBean命名戦略に依存したくない場合は、カスタムBean命名戦略を提供できます。まず、BeanNameGeneratorインターフェースを実装し、デフォルトの引数なしコンストラクターを必ず含めてください。次に、スキャナーを構成するときに完全修飾クラス名を指定します。

 <context:component-scan base-package="org.example"
                         name-generator="org.example.MyNameGenerator" />

deafaultの実装は、大文字と小文字が区別されないクラス名です。

于 2012-09-21T17:23:43.927 に答える
0

の代わりに@Component、を使用したいと思います。そうすれば、beanBで行っているように使用@Resource(name="your_id_here")できます。<ref>試してみます。

ソース:http ://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s11.html#beans-resource-annotation

于 2012-09-21T16:54:02.337 に答える