我是Spring新手,我遇到以下问题: 我有以下bean:
<bean id="lastName" class="java.lang.String">
<constructor-arg value="Johnson"/>
</bean>
然后,在我的班级RegisterPerson中,我有以下
@Configurable
public class RegisterPerson
@Resource(name="lastName")
private String lastName;
然后在我的方法displayName(){
System.out.println(lastName)
}
lastName为空。
我找了一些例子,但找不到与我的问题类似的东西。任何意见或建议将不胜感激。
谢谢!
答案 0 :(得分:2)
将String注入到类中的最佳方法是在Spring XML中声明属性configurer:如下所示:
<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="ignoreResourceNotFound" value="true"/>
<property name="locations">
<list>
<value>classpath:/cfg/yourPropsFile.properties</value>
</list>
</property>
</bean>
如果您正在使用注释,请确保在spring文件中包含以下行:
<context:annotation-config/>
<context:component-scan base-package="com.your.app"/>
然后只需将要注入spring bean的字符串添加到该文件中,例如:
my.prop=Johnson
然后使用@Value注释将其注入您的控制器:
@Value("${my.prop}")
private String lastName;
这假设您的值需要是可配置的。
否则,如果您需要按照现在尝试的方式注入String值,请注意默认情况下使用@Configurable注释自动装配不起作用。要启用自动装配,您需要使用@Configurable(autowire = Autowire.BY_NAME)
启用它,但除非您确实需要,否则不应使用它。 @Configurable注释主要用于AspecJ,这不是你想要在这里实现的。
因此,使用@Component并使用:
定义您的课程@Autowired
@Qualifier("lastName")
private String lastName;
将解决您的问题。
答案 1 :(得分:1)
您应该使用自动装配和限定符注释..
@Autowired
@Qualifier("lastName")
private String lastName;
尝试此配置
public class Test {
public static void main(String[] args) {
ApplicationContext context=new ClassPathXmlApplicationContext("app-context.xml");
String s = (String) context.getBean("lastName");
}
}