0

私は自分のサービスを次のように定義しました:

@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;
4

1 に答える 1

0

それはそのように機能していません...

Springは引数なしのコンストラクターを使用してBeanを作成し、後でそれらのBeanに依存関係を結び付けます。

あなたの場合、Springはコンストラクターに渡したい文字列を知ることができません...

たとえば、Java構成を使用してサービスBeanを作成できます(そして、Beanから@Componentを削除できます)。

@Configuration
public class Config {

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

}
于 2013-02-19T07:02:31.420 に答える