有没有办法@Autowire一个需要构造函数参数的bean?

我正在使用Spring 3.0.5,并为类成员尽可能多地使用@Autowire注释。我需要自动装配的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注释。

一个常见的用例是使用"#{systemProperties.myProp}"样式表达式分配默认字段值 。

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;

}

// ...

}

请参阅: 表达式语言>注释配置

更清楚地说:在你的方案中,你将连接两个类,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具有不同值的不同实例,则应使用Qualifier批注

以上是 有没有办法@Autowire一个需要构造函数参数的bean? 的全部内容, 来源链接: utcz.com/qa/432996.html

回到顶部