我正在使用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注释。
@Value
一个常见的用例是使用"#{systemProperties.myProp}"样式表达式分配默认字段值 。
"#{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批注