简单的 autowire="byName" 不起作用
Simple autowire="byName" doesn't work
我有一个带有字段的 POJO message
:
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>
但是,由于某些原因,按名称自动装配不起作用。以下代码显示空值:
AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld world = (HelloWorld) context.getBean("helloWorld");
System.out.println(world.getMessage());
只需在您的 bean 定义中添加 属性:
<bean id="helloWorld" class="com.packt.lifecycle.HelloWorld" autowire="byName">
<property name="message" value="auto wired1" />
</bean>
你不能像那样自动装配字符串。
查看 exceptions for auto-wiring。
我认为不鼓励自动连接常量基元,因此它们的创建类似于 属性 值 - 这将迫使您将常量外化到听起来更合适的 属性 文件中。
而是在属性文件中将您的消息定义为:
message.key=Hello World
然后使用 PropertyConfigurer
加载您的属性,然后将常量属性自动装配为 :
@Value("${message.key}")
private String message;
或提供默认值(硬编码)如
@Value("${useDefault:Hello World}")
private String message;
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"/>
我有一个带有字段的 POJO message
:
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>
但是,由于某些原因,按名称自动装配不起作用。以下代码显示空值:
AbstractApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
HelloWorld world = (HelloWorld) context.getBean("helloWorld");
System.out.println(world.getMessage());
只需在您的 bean 定义中添加 属性:
<bean id="helloWorld" class="com.packt.lifecycle.HelloWorld" autowire="byName">
<property name="message" value="auto wired1" />
</bean>
你不能像那样自动装配字符串。 查看 exceptions for auto-wiring。
我认为不鼓励自动连接常量基元,因此它们的创建类似于 属性 值 - 这将迫使您将常量外化到听起来更合适的 属性 文件中。
而是在属性文件中将您的消息定义为:
message.key=Hello World
然后使用 PropertyConfigurer
加载您的属性,然后将常量属性自动装配为 :
@Value("${message.key}")
private String message;
或提供默认值(硬编码)如
@Value("${useDefault:Hello World}")
private String message;
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"/>