0

私のアプリケーションには、以下のようなインターフェースがあります。

public interface MainInterface
{
     void someMethod();
}

次に、このインターフェイスの実装がいくつかあります。

@Service    
public class ImplClass1 implements MainInterface
{
   @Override
   public void someMehtod()
   {
      //Execution of code
   }
}

@Service    
public class ImplClass2 implements MainInterface
{
   @Override
   public void someMehtod()
   {
      //Execution of code
   }
}

@Service
public class ImplClass3 implements MainInterface
{
   @Override
   public void someMehtod()
   {
      //Execution of code
   }
}

下はコントローラーです。

@Controller
public class MainController
{
     MainInterface implObj;

     @RequestMapping("service1")
     public void Service1Handler()
     {
         //Replace below with @Autowire
         implObj = new ImplClass1();
     }

     @RequestMapping("service2")
     public void Service1Handler()
     {
         //Replace below with @Autowire
         implObj = new ImplClass2();
     }

     @RequestMapping("service3")
     public void Service1Handler()
     {
         //Replace below with @Autowire
         implObj = new ImplClass3();
     }
}

各メソッドのコメントで述べたように、春を使用して初期化したいと考えています。これはほんの一例です。私のリアルタイム アプリケーションでは、コントローラーに 12 のインターフェイスと 6 つのメソッドを実装しています。

メソッドレベルで自動配線機能を使用する方法を教えてください。または、他の最善の方法を提案してください。

ありがとう

4

1 に答える 1

3

これらの2つの方法を考えることができます-

@Controller
public class MainController
{
     @Autowired @Qualifier("impl1") MainInterface impl1;
     @Autowired @Qualifier("impl2") MainInterface impl2;
     @Autowired @Qualifier("impl3") MainInterface impl3;

     @RequestMapping("service1")
     public void service1Handler()
     {
          impl1.doSomething()
     }

     @RequestMapping("service2")
     public void Service1Handler()
     {
         //Replace below with @Autowire
          impl2.doSomething()
     }

     @RequestMapping("service3")
     public void Service1Handler()
     {
         //Replace below with @Autowire
           impl3.doSomething()
     }
}

または、工場の背後に隠します。

class MaintenanceInterfaceFactory{
     @Autowired @Qualifier("impl1") MainInterface impl1;
     @Autowired @Qualifier("impl2") MainInterface impl2;
     @Autowired @Qualifier("impl3") MainInterface impl3;
     getImplForService(String name){
        //return one of the impls above based on say service name..
     }
}
于 2012-07-13T21:03:25.773 に答える