我正在使用 Spring 3.0.5 并尽可能为我的类(class)成员使用 @Autowire 注释。我需要 Autowiring 的 bean 之一需要为其构造函数提供参数。我浏览了 Spring 文档,但似乎找不到任何关于如何注释构造函数参数的引用。
在 XML 中,我可以将其用作 bean 定义的一部分。 @Autowire 注解有类似的机制吗?
例如:
@Component
public class MyConstructorClass{
String var;
public MyConstructorClass( String constrArg ){
this.var = var;
}
...
}
@Service
public class MyBeanService{
@Autowired
MyConstructorClass myConstructorClass;
....
}
在这个例子中,如何在 MyBeanService 中使用@Autowire 注解指定“constrArg”的值?有没有办法做到这一点?
谢谢,
埃里克
最佳答案
您需要 @Value
注释。
A common use case is to assign default field values using
"#{systemProperties.myProp}"
style expressions.
public class SimpleMovieLister {
private MovieFinder movieFinder;
private String defaultLocale;
@Autowired
public void configure(MovieFinder movieFinder,
@Value("#{ systemProperties['user.region'] }") String defaultLocale) {
this.movieFinder = movieFinder;
this.defaultLocale = defaultLocale;
}
// ...
}
参见: Expression Language > Annotation Configuration
更清楚地说:在您的场景中,您将连接两个类,MybeanService
和 MyConstructorClass
,如下所示:
@Component
public class MyBeanService implements BeanService{
@Autowired
public MybeanService(MyConstructorClass foo){
// do something with foo
}
}
@Component
public class MyConstructorClass{
public MyConstructorClass(@Value("#{some expression here}") String value){
// do something with value
}
}
更新:如果您需要多个不同值的 MyConstructorClass
实例,您应该 use Qualifier annotations
关于spring - 有没有办法 @Autowire 需要构造函数参数的 bean?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6739566/