Spring Autowiring(使用@Autowired)用于Defined Constructor

时间:2013-02-19 06:53:31

标签: spring

我已将我的服务定义为:

@Component("myService")
public class MyServiceImpl implements MyService {
  public void serviceMethod(){
  }
}

我在我的客户端程序中使用此服务如下所示:

Public Class{
   @Autowired
   MyService myService;

   public void myMethod(){
     myService.serviceMethod();            
   }
}

但是,如果我在我的服务中有以下定义的构造函数:

@Component("myService")  
  public class MyServiceImpl implements MyService {
      private myVar;
      public MyServiceImpl(String myVar){
        this.myVar = myVar;
      }
      public void serviceMethod(){
      }
 } 

问题: 如何在我的客户端程序中自动装配以便调用我定义的构造函数?

下面的方法使用默认构造函数初始化对象:

 @Autowired
 MyService myService;

1 个答案:

答案 0 :(得分:0)

这不是那样的工作......

Spring使用no-arg构造函数来创建bean,然后将依赖关系连接到那些bean。

在你的情况下,Spring无法知道你想传递给构造函数的字符串......

例如,您可以使用java配置来创建Service bean(并从bean中删除@Component)

@Configuration
public class Config {

    @Bean
    MyService myService() {
        return new MyService( "some string" );
    }

}