gpt4 book ai didi

java - @Resource 为 String 类的 bean 返回 null

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:46:57 24 4
gpt4 key购买 nike

我是 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 为空。

我查找了一些示例,但找不到与我的问题类似的内容。任何意见或建议将不胜感激。

谢谢!

最佳答案

将 String 注入(inject)类的最佳方法是在 Spring XML 中声明属性配置器:如下所示:

<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"/>

然后只需将要注入(inject)到 spring bean 中的字符串添加到该文件中,例如:

my.prop=Johnson

然后使用 @Value 将其注入(inject)到您的 Controller 中注释:

@Value("${my.prop}")
private String lastName;

这是假设您的值需要可配置。

否则,如果您需要像现在这样尝试注入(inject)字符串值,请注意默认情况下使用 @Configurable注释 Autowiring 将不起作用。要启用 Autowiring ,您需要使用以下命令启用它:@Configurable(autowire = Autowire.BY_NAME),但除非您确实需要,否则不应使用它。 @Configurable注释主要用于 AspecJ,这不是您要在此处实现的目标。

所以用@Component定义你的类并使用:

@Autowired 
@Qualifier("lastName")
private String lastName;

将解决您的问题。

关于java - @Resource 为 String 类的 bean 返回 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25686116/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com