我有一个如下定义的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>
答案 0 :(得分:3)
在Spring文档中:
有这个文本&#34;你不能自动装配所谓的简单属性,如基元,字符串和类(以及这些简单属性的数组)。这种限制是按设计的。&#34;
我还没有找到在这种情况下发生的事情的确切说明。根据我的经验,字符串属性的自动装配是不可靠的。有时工作,有时不工作。所以我建议避免使用字符串值的自动装配。
在您的情况下,您使用的是Autowire和constructor-arg。它们是不同的机制。只需要一个。
答案 1 :(得分:0)
尝试使用以下内容:
@Autowired
@Qualifier("stringToAutowire")
private String someString;
答案 2 :(得分:0)
您无法自动装配简单属性,例如基元,字符串和类(以及此类简单属性的数组),属性和构造函数-arg设置中的显式依赖项始终会覆盖自动装配。
从stringToAutowire中删除@Autowired注释并使用属性。