我有一个包含字段message
的POJO:
package com.packt.lifecycle;
public class HelloWorld {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
在我的应用程序上下文XML中,我有2个bean定义:
<bean id="helloWorld" class="com.packt.lifecycle.HelloWorld" autowire="byName">
</bean>
<bean name="message" class="java.lang.String" >
<constructor-arg value="auto wired1" />
</bean>
但是,由于某种原因,名称自动装配不起作用。以下代码显示null:
AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld world = (HelloWorld) context.getBean("helloWorld");
System.out.println(world.getMessage());
答案 0 :(得分:2)
你无法像这样自动装配字符串。 查看exceptions for auto-wiring。
我认为不鼓励使用常量基元的自动连接,以便它们像属性值一样被创建 - 这将迫使您将常量外部化为属性文件,这听起来更合适。
而是将属性文件中的消息定义为:
message.key=Hello World
然后使用PropertyConfigurer
加载属性,然后将常量属性自动装配为:
@Value("${message.key}")
private String message;
或提供默认值(硬编码)为
@Value("${useDefault:Hello World}")
private String message;
答案 1 :(得分:0)
Autowire无法正常工作,因为Spring中未配置该属性。将注释放在字段或方法上,让Spring知道此属性需要自动装配。
@Component
public class HelloWorld {
private String message;
public String getMessage() {
return message;
}
@Autowired
public void setMessage(String message) {
System.out.println(message);
this.message = message;
}
}
要使注释工作,您需要类似
的内容<!--<context:annotation-config/>-->
<context:component-scan base-package="com.packt.lifecycle"/>
答案 2 :(得分:-1)
只需在bean定义中添加属性:
<bean id="helloWorld" class="com.packt.lifecycle.HelloWorld" autowire="byName">
<property name="message" value="auto wired1" />
</bean>