Is there a way to @Autowire a bean that requires constructor arguments?
autowired, constructor, spring, spring-annotations, spring-bean
Solution
You need the `@Value` annotation.
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;
}
// ...
}
See: Expression Language > Annotation Configuration
To be more clear: in your scenario, you'd wire two classes, `MybeanService` and `MyConstructorClass`, something like this:
@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
}
}
Update: if you need several different instances of `MyConstructorClass` with different values, you should use Qualifier annotations
Problem
I'm using Spring 3.0.5 and am using @Autowire annotation for my class members as much as possible. One of the beans that I need to autowire requires arguments to its constructor. I've looked through the Spring docs, but cannot seem to find any reference to how to annotate constructor arguments. In XML, I can use as part of the bean definition. Is there a similar mechanism for @Autowire annotation? Ex: ``` @Component public class MyConstructorClass{ String var; public MyConstructorClass( String constrArg ){ this.var = var; } ... } @Service public class MyBeanService{ @Autowired MyConstructorClass myConstructorClass; .... } ``` In this example, how do I specify the value of "constrArg" in MyBeanService with the @Autowire annotation? Is there any way to do this? Thanks, Eric