2016. 3. 17. 13:12
반응형

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
Posted by seongsland