方法中的Spring Autowire

时间:2012-07-13 20:13:35

标签: spring-mvc spring-3 autowired

我的应用程序有如下界面。

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();
     }
}

正如每个方法的评论中所提到的,我想用spring初始化它。 这只是一个例子。在我的实时应用程序中,我有12个接口实现和控制器中的6个方法。

请您指导我如何在方法级别使用自动装配功能或建议任何其他最佳方式。

由于

1 个答案:

答案 0 :(得分:3)

可以想到这两种方式 -

@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..
     }
}