2014-11-10 4 views
0

우리는 Spring DI를 사용하여 다시 구현하려는 웹 서비스를 가지고 있습니다.웹 서비스에서 스프링 의존성 주입 사용 방법

작동 방식은 다음과 같습니다. 웹 서비스가 컨트롤러에서 수신하는 요청마다 페이지 이름을 기반으로 처리기를 인스턴스화하여 요청을 처리 할 수있는 작업 목록을 가져옵니다.

interface Handler { 
    List<Task> getTaskList(); 
} 

class Controller { 
    //Inject handler 
    Handler handler; 

    processrequest(){ 
     handler.getTasklist() -> execute 
    } 
} 

우리는 5-6 같은 핸들러를 가지고 우리는 해당 핸들러가 요청 페이지 이름에 따라 컨트롤러에 주입하고 싶다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 다른 처리기를 즉시 주입하려면 어떻게해야합니까?

감사

답변

0

1 구성에서 핸들러를 작성 (또는 서비스 구현 주석) :

@Bean 
public Handler handler1() { 
    // return handler 1 
} 

@Bean 
public Handler handler2() { 
    // return handler 2 
} 

가 컨트롤러에 ApplicationContext를 주입 2a-. 요청 매핑을 기반으로 필요한 서비스를 검색합니다.

class Controller { 

    @Autowired 
    private ApplicationContext context; 

    @RequestMapping(value = "/handler1") 
    processrequest(){ 
     Handler handler = context.getBean("handler1"); 
     handler.getTasklist() -> execute 
    } 

    @RequestMapping(value = "/handler2") 
    processrequest(){ 
     Handler handler = context.getBean("handler2"); 
     handler.getTasklist() -> execute 
    } 
} 

2b- 또는 여러 개의 컨트롤러를 만들고 적절한 핸들러를 삽입하십시오.

@RequestMapping("/handler1") 
class Controller1 { 

    @Autowired 
    @Qualifier("handler1") 
    private Handler handler; 

    processrequest(){ 
     handler.getTasklist() -> execute 
    } 
} 

@RequestMapping("/handler2") 
class Controller2 { 

    @Autowired 
    @Qualifier("handler2") 
    private Handler handler; 

    processrequest(){ 
     handler.getTasklist() -> execute 
    } 
}