Spring的值注释在构造函数参数中不起作用

时间:2016-08-09 09:03:43

标签: java spring spring-mvc

服务

@Service
class Foo{
   Foo(@Value("${my.property}")int delay){
    ...
   }
}

消费

class Bar {
    @Autowire
    Foo foo;
}

的beans.xml

<context:component-scan base-package="foo.*" />
<context:spring-configured />
<context:property-placeholder location="classpath:foo/internal.properties"/>

internal.properties确实包含my.property=5000。但看起来春天甚至不关心@Value注释。如果我运行应用程序,spring会抱怨找不到默认构造函数。

Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [foo.Foo]: No default constructor found; nested exception is java.lang.NoSuchMethodException...

我甚至尝试使用constructor-arg标记在beans.xml中配置参数。此方法产生相同的错误。

为什么值注入不起作用?

2 个答案:

答案 0 :(得分:4)

@Service
class Foo{
  @Autowired
  Foo(@Value("${my.property}")int delay){
    ...
   }
}

您忘记在构造函数中添加@Autowired

Spring 4.3 ,如果目标bean只定义@Autowired

,我们不再需要指定one constructor注释

答案 1 :(得分:-2)

我认为您的问题是,您缺少构造函数(请检查您的例外情况)。对于Bean来说,创建默认(无args)构造函数非常重要。有关这方面的更多信息,请阅读here。这是一篇好文章。