其他分享
首页 > 其他分享> > spring – 有没有办法让@Autowire需要构造函数参数的bean?

spring – 有没有办法让@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;

  ....
}

在此示例中,如何使用@Autowire注释在MyBeanService中指定“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,constructor,autowired,spring-annotations,spring-bean
来源: https://codeday.me/bug/20190916/1808508.html