spring에 bean 등록이 안된 class의 경우 ApplicationContextAware 를 implement 해줘서 spring bean을 가져올수 있는데,

jsp단에서도 bean을 가져와야 되는 경우가 종종 발생한다.

spring은 web단에서 listener와 sevlet에 올릴수 있는데, 이때 각 설정 xml마다 생성하는 bean이 다르므로 어디의 bean을 참조할지에 따라 불러오는 방식에 차이가 난다.

1. listener
 <listener>
  <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
 </listener>

WebApplicationContext wac = WebApplicationContextUtils.getRequiredWebApplicationContext(getServletContext());
TestBean testBean    = (TestBean) wac.getBean("testBean");

2. servlet
 <servlet>
  <servlet-name>dispatcher</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet </servlet-class>
  <load-on-startup>1</load-on-startup>
 </servlet>

WebApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(getServletContext(), FrameworkServlet.SERVLET_CONTEXT_PREFIX+"dispatcher"); // "displatcher"는 위의 servlet-name을 지정.
TestBean testBean    = (TestBean) wac.getBean("testBean");

각각의 import는 아래와 같다.
org.springframework.web.context.WebApplicationContext
org.springframework.web.context.support.WebApplicationContextUtils
org.springframework.web.servlet.FrameworkServlet

xml 경로를 직접 resource에서 가져와서 처리하는 방법도 있는데.. 이것은 xml이 많으면 다 적어줘야 되서 불편하고 실행도 잘 안되는것 같다.

getBean이 잘 안되거나 bean name을 잘 모를땐 정의된 bean을 출력 해 볼수도 있다.
System.out.println("!!" + java.util.Arrays.asList(wac.getBeanDefinitionNames()));


getServletContext() 의 경우 tomcat에선 사용가능하지만 weblogic에선 사용할 수 없다.

양쪽에서 모두 사용하기 위해선 pageContext.getServletContext() 이렇게 작성한다.


'Jsp-Servlet > Spring' 카테고리의 다른 글

Spring mybatis 다중 DB를 사용하는 방법  (1) 2018.03.27
spring quartz 세팅  (0) 2016.09.06
spring transaction 정리문서  (2) 2011.08.05
spring anotation 정보 출력  (1) 2011.05.13
Spring Exception View로 연결  (2) 2011.03.21