2014-09-05 56 views
2

我新的春天,我有以下問題: 我有以下豆:@Resource返回null String類的豆

<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

你解決了這個問題嗎?如果是的話,你是如何解決它的? – Xstian 2014-10-13 13:45:44

回答

1

您應該使用自動裝配Autowired和限定註解..

@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"); 
    } 
} 
+0

它仍然說它是空的。有沒有其他方法可以將spring.xml中的某些東西聲明爲一個bean,然後在類中獲得它的值? 我只需要將這個字符串從spring.xml傳遞到類RegisterPerson – user3603634 2014-09-05 12:49:30

+0

如果RegisterPerson將由新語句創建,那麼您可能會遇到問題。 – Xstian 2014-09-05 12:52:49

+0

是的,我有另一種方法:返回新的RegisterPerson()。有沒有解決方法? – user3603634 2014-09-05 12:55:12

2

注入字符串到類的最好方法是聲明屬性在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> 

如果使用註釋確保你有你的春天文件這些行:

<context:annotation-config/> 
<context:component-scan base-package="com.your.app"/> 

然後,只需添加你想在你的Spring bean被注入到該文件中的字符串,如:

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

這是假設你的價值:

my.prop=Johnson 

然後使用@Value註解注入它在你的控制器需要可配置。

否則,如果你需要注入字符串值與您試圖現在要做的,請注意,通過使用@Configurable註釋自動連接將無法正常工作默認。要啓用自動裝配,您需要啓用它:@Configurable(autowire = Autowire.BY_NAME),但不應使用它,除非您真的需要它。 @Configurable註釋主要與AspecJ一起使用,這不是您要在此處實現的目標。

因此,與@Component和使用定義類:

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

將解決你的問題。

相關問題