개발/Spring

[Spring] @RequestMapping 을 xml 코드로 사용

hojak99 2017. 10. 12. 13:44

지금 하고 있는 프로젝트가 모두 xml로 설정되어 있어서 혼자 어노테이션 사용하기 좀 그래서 xml 로 설정하고 있는 중에 Controller 클래스에서 @RequestMapping 부분을 xml로 어떻게 하는지 몰라서 프로젝트에 누가 짜놓았던 코드를 보니 ParameterMethodNameResolver 란 게 있었다.


이걸 사용하면 @RequestMapping 을 사용하지 않더라도 Controller 클래스에서 각각의 메소드들을 구분해 이용할 수 있다.




우선 스프링에 이걸 보고 있는 당신들의 프로젝트에 ~-context.xml 에 들어가자/.


그리고 

<bean id="statisticsMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver" 
		p:paramName="type" p:defaultMethodName="default">
</bean>	


와 같은 식으로 코드를 작성한다.


여기서 paramName은 좀 뒤에 다시 설명하도록 하고, defaultMethodName은 말 그대로 default로 사용될 메소드 이름을 작성하면 된다.


즉, 예를 들면 TestController 클래스에 다음과 같이 4가지의 메소드가 있다고 하자.


public ModelAndView test_1 () {

.. 코드

}


public ModelAndView test_2 () {

.. 코드

}


public ModelAndView test_3 () {

.. 코드

}


public ModelAndView default () {

.. 코드

}


이 때 위에 MethodNameResolver 로 인해서 파라미터가 없을 시에 기본적으로 default() 메소드에 접근한단 뜻이다.





그렇다면 paramName 은 뭘까?


우선 저렇게 default() 메소드를 제외한 3가지 메소드를 구분시켜야 한다. 그래서 A.do를 접근했을 때 test_1() 이 실행되고 아니면 A.do 에서 다른 버튼을 눌렀을 때 test_2()가 실행되도록 구분해야 한다는 말이다.


그래서 paramName 이 존재한다.


http://hojak99.tistory.com/admin/entry/post 와 같은 링크가 있다하자. 우선 기본으로 default() 메소드에서 비지니스 로직을 처리하고 나서 View 를 반환해 페이지가 작동했다.


여기서 어떤 버튼을 클릭해 이 페이지 상의 수치나 뭘 DB에 넣으려고 한다. 이에 대한 비지니스 코드는 test_1() 메소드에 존재한다.


그러면 버튼을 클릭했을 시 http://hojak99.tistory.com/admin/entry/post?type=test_1 가 되도록 한다. 이러면 test_1() 메소드로 접근할 수 있게 된다.



이 정도면 이해가 될 것 같다.





그런데 우리는 여기서 그저 MethodNameResolver 에 대한 Bean 만 생성했다. Controller 에 대한 Bean 에 이 MethodNameResolver 를 적용시켜줘야 한다.


그래서 

<bean id="printController" class="kr.co.controller.printController"
		p:methodNameResolver-ref="statisticsMethodNameResolver" />	

와 같이 methodNameResolver-ref 를 이용해 지정해주면 된다.


끝~


반응형