3

因此,出于某种原因,我们项目的一半 bean 用 @Component 标记并注入到其他用 @Autowired 注解标记为 @Component 的对象中,而另一半用 appliciationContext.xml bean 声明和带有 ref beans 值的属性显式连接。

问题是,在那些 xml bean 声明中,我可以注入标记为 @Component 的对象之一吗?如果是这样,它的 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类型的默认名称BeanAImplbeanAImpl,您可以在 XML 中使用它,就像手动声明的 bean 一样(还要注意<property>允许更短的语法):

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

或者,您可以将名称显式设置为@Component("beanA").

于 2012-09-21T17:08:35.390 回答
1

这是春天的说法:

当一个组件作为扫描过程的一部分被自动检测到时,它的 bean 名称将由该扫描器已知的 BeanNameGenerator 策略生成。如果您不想依赖默认的 bean 命名策略,您可以提供自定义 bean 命名策略。首先,实现 BeanNameGenerator 接口,并确保包含一个默认的无参数构造函数。然后,在配置扫描器时提供完全限定的类名:

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

默认实现只是以 loer 大小写开头的类名。

于 2012-09-21T17:23:43.927 回答
0

而不是@Component,我认为您想使用@Resource(name="your_id_here"),然后您可以<ref>像使用 beanB 一样使用它。试一试。

来源:http ://static.springsource.org/spring/docs/3.0.0.M3/reference/html/ch04s11.html#beans-resource-annotation

于 2012-09-21T16:54:02.337 回答