2012-11-20 5 views
0

Spring MVC에서 Controller로부터 Service Layer에 액세스하는 가장 좋은 방법은 무엇입니까? SpringMVC에 대한 주석을 사용하고 있습니다.Spring MVC 컨트롤러의 서비스 레이어 액세스

이전에는 컨트롤러의 모든 메소드에서 ClassPathXMLApplicationContext (spring-bean-name.xml)를 호출하여 콩을 가져 왔었습니다.

질문에 대한 해결책에서 Accessing Service Layer from custom Controller in Spring MVC 서비스 빈을 autowired해야한다는 것을 알고 있습니다.

그러나 컨트롤러가 여러 서비스에 액세스한다고 가정하면 여러 콩을 주입해야합니까? 하지만 그것은 좋은 연습이 아니기 때문에 컨트롤러 내에서 1-2 개의 메소드에서만 특정 서비스를 사용해야하고 함수 변수가 아닌 클래스 변수로 만드는 것이 좋지 않습니다.

답변

3

정확합니다. 사용하려는 서비스를 자동 응답해야합니다. 클래스 변수 대 로컬 (함수) 변수에 대해 걱정하지 마십시오. 이것이 DI 패턴이 구현되는 방법입니다.

가장 엄격한 객체 지향 설계의 의미에서 객체의 상태를 설명하는 경우가 아니면 클래스 수준에서 변수를 선언해서는 안된다는 점이 있습니다. 그러나 DI (Dependency Injection)는 아무런 메소드가 실제로 서비스를 사용하는지에 관계없이 개발자가 autowired 클래스 멤버로서 서비스 빈을 싫어하는 패턴으로 확립되어 있습니다.

모든 방법에서 new ClassPathXMLApplicationContext("spring-bean-name.xml")을 수행하는 것은 100 % 잘못된 방법입니다.하는 방법입니다. 이는 큰 오버 헤드이고 완전히 불필요한 메소드를 실행할 때마다 새로운 bean-factory 및 bean-context 을 생성하는 것을 포함합니다. bean-factory는 (서블릿 엔진 환경에있는 경우 DispatcherServlet 또는 ContextLoaderListener를 사용하여)으로 만들어야합니다.

+0

감사합니다. 마지막 부분을 보여주는 샘플 코드 나 링크를 제공 할 수 있습니다. "Bean-Factory는 DispatcherServlet 또는 ContextLoaderListener를 사용하여 서블릿 엔진 환경에있는 경우 한 번만 만들어야합니다." 여러 대의 컨트롤러를 사용하고 꽤 큰 응용 프로그램을 만들 때 어떻게해야합니까? –

+1

@AkhilKNambiar http://www.dzone.com/tutorials/java/spring/spring-annotation-controller-1.html – user533

+1

[공식 문서] (http://static.springsource.org/spring)를 보았습니까? /docs/3.1.x/spring-framework-reference/html/)? 특히 16 장 (그리고 어느 정도는 18.2 절)이 재미있을 것입니다. Spring과 DI가 어떻게 작동하는지 더 잘 이해하기 위해, 모든 것을 공부하도록 조언합니다. – pap

0

당신은 빈 공장을 인스턴스화 정적 클래스가 다음 함께 같은 종속성을 사용하는 모든 방법을 유지하려고해야하는 이유는이 정적 클래스

static class SpringConfig() 
{ 
    private static ApplicationContext ctx = null; 
    static 
    { 
     ctx=new ClassPathXmlApplicationContext("context.xml"); 
    } 

    public static Object getBean(String beanName) 
    { 
     return ctx.getBean(beanName); 
    } 
} 
0

의 사용자 정의 정적의 getBean 방법을 사용할 수 있습니다 , 이것은 낮은 커플 링입니다. 나쁜 관행은 의존성을 전역 변수로 주입하는 것이 아닙니다. 나쁜 습관은 클래스를 덜 결합하도록 메소드를 그룹화하지 않는 것입니다.

관련 문제