2017-04-13 39 views
0

我正在將我的應用程序從spring 3.x升級到4.3。我正在刪除xml配置並使用它的註釋。我得到以下異常:哪個註釋將列表值注入列表屬性?

Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanInitializationException: Properties 'authorities' and 'username' are required for bean 'getJobUsingQuartz' 

什麼是下面的XML代碼註釋:

<bean id="mcn" 
    class="quartzJobs.jobs.MyClassName"> 
    <property name="username" value="CronUser"/> 
    <property name="authorities"> 
     <list> 
      <value>ROLE_SYSTEM</value> 
     </list> 
    </property> 
</bean> 

我想用註釋注入上述價值的財產。我試圖像以下:

MyClassName.java

@Configuration 
@ComponentScan(basePackages = "quartzJobs.jobs") 
public class MyClassName{ 
    @Autowired 
     @Value("CronUser") 
     private String username; 

     @Autowired 
     @Value(value = "{ROLE_SYSTEM}") 
     private List<String> authorities; 

     @Required 
     public 
     void setUsername(final String aUsername) 
     { 
      username = aUsername; 
     } 

     @Required 
     public 
     void setAuthorities(final List<String> aAuthorities) 
     { 
      authorities = aAuthorities; 
     } 
     } 

我做錯了什麼?請幫幫我。

+0

如果我沒記錯,你不能注入使用集合了'@ Value'註解。但你可以在任何地方創建一個列表,並使用@ Component註解將它變成一個bean:@Component(「authorities」)private List authorities = new ArrayList(){{add(「ROLE_SYSTEM」);}};/*不好的風格* /'然後你可以從內存中注入它,我認爲是這樣的:'@Resource(name =「authorities」)private列表權限;'同時檢查Spring表達式語言(SpEL);它可能會提供一些幫助你的東西。 :) – Christian

+0

@Christian,謝謝你的迴應。我嘗試了你的建議,但沒有運氣。仍然有相同的例外 –

回答

0

變化以班級爲

@Configuration 
@ComponentScan(basePackages = "quartzJobs.jobs") 
public class MyClassName{ 


    private String username; 



    private List<String> authorities; 

    @Required 
    public void setUsername(final String aUsername) 
    { 
     username = aUsername; 
    } 

    @Required 
    public void setAuthorities(final List<String> aAuthorities) 
    { 
     authorities = aAuthorities; 
    } 
    } 

無論你打算使用MyClassName 的實例,你可以注入對象作爲

@Autowired 
private MyClassName myClassName; 

自動裝配將根據類型。 and please refer this Link

1

這可以通過Spring Expression Language(簡稱SpEL)來實現,這是一種強大的表達式語言,支持在運行時查詢和操作對象圖。語言語法類似於Unified EL,但提供了額外的功能,特別是方法調用和基本的字符串模板功能。

這會爲你的情況下工作:

@Value("#{new String[]{\"ROLE_SYSTEM\"}}") 
private List<String> authorities; 
+0

謝謝你的迴應。仍然我得到BeanInitializationException。我試過你的代碼。請檢查我的http://stackoverflow.com/questions/43389047/what-is-annotation-for-taskannotation-driven-in-spring-4-3與這個問題有關的問題 –