因此,出于某种原因,我们项目的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>
答案 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一样。试一试。