2017-04-13 97 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与这个问题有关的问题 –