无法自动装配String类型的bean

时间:2014-09-14 16:51:07

标签: spring

我有一个如下定义的bean,我想要自动加入一个在Spring上下文文件中定义为bean的类。但它不起作用,奇怪的是在同一个类中自动装配的其他对象bean类型正在自动装配。 Bean to Autowire如下: -

  <bean id="stringToAutowire" class="java.lang.String">
      <constructor-arg value="true" />
  </bean>

自动装配的类是: - 我尝试用@Component注释它。但没有成功。

public class AService { 
  @Autowired 
  private BDao bDao; 

  @Autowired 
  private String stringToAutowire; 
   ........
 }

上下文文件如下: -

<context:annotation-config/>
<context:component-scan base-package ="PKG "/>
<bean id="aService" class="AService"/>
<bean id="bDao" class="BDao"/>
<bean id="stringToAutowire" class="java.lang.String">
  <constructor-arg value="true" />
</bean>

3 个答案:

答案 0 :(得分:3)

在Spring文档中:

有这个文本&#34;你不能自动装配所谓的简单属性,如基元,字符串和类(以及这些简单属性的数组)。这种限制是按设计的。&#34;

我还没有找到在这种情况下发生的事情的确切说明。根据我的经验,字符串属性的自动装配是不可靠的。有时工作,有时不工作。所以我建议避免使用字符串值的自动装配。

在您的情况下,您使用的是Autowire和constructor-arg。它们是不同的机制。只需要一个。

  1. Ditch Autowire for String。
  2. 向AService添加一个构造函数,该构造函数将第一个参数作为要分配给&#34; stringToAutowire&#34;的字符串。 &#34;构造函数-arg&#34;将指定为此构造函数参数传递的内容。

答案 1 :(得分:0)

尝试使用以下内容:

@Autowired
@Qualifier("stringToAutowire")
private String someString;

答案 2 :(得分:0)

您无法自动装配简单属性,例如基元,字符串和类(以及此类简单属性的数组),属性和构造函数-arg设置中的显式依赖项始终会覆盖自动装配。

从stringToAutowire中删除@Autowired注释并使用属性。