2012-07-13 48 views
0

我的應用程序具有如下的接口。方法內的Spring Autowire

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個方法。

可以請指導我如何在方法級別使用autowire功能或建議任何其他最佳方法。

感謝

+0

我擔心的是,控制器會sigletone,你讓你的界面控制器的一個實例,並且您想要在每種方法中更改實現。 – 2012-07-13 20:35:57

+0

是的,這是真的。 – 2012-07-17 07:05:03

回答

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.. 
    } 
} 
+0

感謝您的回覆。正如我所說我有12個接口的實現,所以根據第一個選項創建12個類變量將很困難。但是你可能會遵循你的第二個解決方案。再次感謝 !!! – 2012-07-17 07:02:44