2014-10-20 2 views
2

나는 봄 mvc 응용 프로그램을 개발 중이다.스프링 컨트롤러에 10 개 이상의 서비스를 주입하려면 어떤 방법을 사용해야합니까?

저는 10 개 이상의 서비스를 주입 할 컨트롤러가 있습니다.

나는이 컨트롤러에서 10+ URL을 노출하고 있으며 각 메서드에서 one or two service 개체를 사용하고 있습니다.

나는 두 가지 접근법을 생각하고있었습니다.

  1. @Autowired를 사용하여 모든 서비스를 직접 주입하십시오.
  2. 필요할 때마다 런타임에 ApplicationContext에서 런타임에 서비스를 가져옵니다.

은 더 나은 또는 둘 다 접근 방식은 메모리 사용량과 시간이 대부분의 경우

답변

8

가장 좋은 방법은 여러 컨트롤러에 컨트롤러를 파괴하는 것입니다

감사의 측면에서 동일있는 방법 저를 제안하십시오. 컨트롤러가 Single Responsibility Principle을 (를) 위반할 가능성이 높기 때문에 종속성이 너무 많으면 Code Smell입니다.

많은 종속성에 대해 을 사용하고 ApplicationContext를 사용하여 종속성을 동적으로 검색하는 것은 대부분의 경우 평범한 솔루션이므로 가능할 때마다 피해야합니다. 당신이해야 할 일은 컨트롤러를 깨뜨린 다음에, @Autowired (필드 주입보다는 생성자가 바람직합니다 - 자세한 내용은 this을 확인하십시오) Spring이 의존성을 주입하게하는 것입니다.

당신이 제안한 솔루션의 성능이나 메모리 사용량에 대해 걱정하지 말고 코드의 유지 보수 가능성에 대해 설명하는 경우.

ApplicationContext에서 종속성을 동적으로 조회하면 컨테이너 종속성에 의해 주입되는 속도가 약간 느려지지만 거의 모든 경우에 차이를 알 수는 없습니다. 위에서 언급했듯이, 가장 먼저 신경 써야 할 부분은 마이크로 성능/메모리 문제가 아닌 코드 유지 보수입니다.

+1

'Code Smell' 문제와'Single Responsibility Principle '을 지적 해 주셔서 감사합니다. 나는 내 관제사를 부인하고 Single Responsibility Priciple을 시행하려고 노력할 것이다. –

+0

답변에서 한 가지 질문이 있습니다. 당신이 언급했듯이, 두 접근법은 모두 평범한 해결책이므로 피해야합니다. 이것으로 당신은 주사를 피하고 새로운 것을 사용하여 물건을 만들어야한다고 말하려고합니까? –

+0

10 가지 종속성을 피하는 것이 좋습니다. 컨트롤러를 해체하고'@ Autowired '를 사용하여 관련 의존성을 주입해야한다. – geoand