服务
@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中配置参数。此方法产生相同的错误。
为什么值注入不起作用?
答案 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。这是一篇好文章。