显式注入标记为@Component的bean

时间:2012-09-21 16:49:22

标签: java spring

因此,出于某种原因,我们项目的bean的一半用@Component标记并注入带有@Autowired注释标记为@Component的其他对象,而另一半用applicationContext.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>

3 个答案:

答案 0 :(得分:2)

类型为@Component的{​​{1}}的默认名称为BeanAImpl,您可以像使用手动声明的bean一样在XML中使用它(另请注意beanAImpl允许更短的语法):

<property>

或者,您可以明确将名称设置为<property name="beanA" ref = "beanAImpl" />

答案 1 :(得分:1)

以下是春天所说的:

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

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

deafault实现只是以loer case开头的类名。

答案 2 :(得分: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