안녕하세요.
환경은 아래와 같습니다.
struts 1.2
spring 1.3
struts 와 spring 버전이 모두 낮아서 Form, SelectCondition, Dto 등 반복적으로 만들어야하는 것이 너무 많아서 필터에서 수행될 액션 인스턴트에 직접 값을 설정하려고 합니다. (@Autowired 와 유사 효과)
각 설정은 아래와 같습니다.
struts-config.xml
<action
path="/shop/Cart"
type="org.springframework.web.struts.DelegatingActionProxy"
scope="request"
unknown="false"
validate="true"
>
</action>
spring.xml
<bean
name="/shop/Cart"
class="com.interpark.action.newmobile.shop.NMCartAction"
singleton="false"
lazy-init="default"
>
</bean>
CommonFilter.java
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) {
// Spean bean (Action 인스턴스) 가져오기
Object bean1 = WebApplicationContextUtils.getRequiredWebApplicationContext(this.filterConfig.getServletContext()).getBean("/shop/Cart");
Object bean2 = WebApplicationContextUtils.getWebApplicationContext(this.filterConfig.getServletContext()).getBean("/shop/Cart");
Object bean3 = WebApplicationContextUtils.getRequiredWebApplicationContext(httpRequest.getSession().getServletContext()).getBean(beanName);
Object bean4 = WebApplicationContextUtils.getWebApplicationContext(httpRequest.getSession().getServletContext()).getBean(beanName);
try {
bean1.getClass().getField("name").set(bean1, "John");
bean2.getClass().getField("name").set(bean2, "John");
bean3.getClass().getField("name").set(bean3, "John");
bean4.getClass().getField("name").set(bean4, "John");
} catch(Exception e) {
System.out.println(e.getMessage());
}
}
위와 같이 해보았지만, bean1, bean2, bean3, bean4 모두 NMCartAction의 인스턴스는 맞지만,
실제 수행하게될 NMCartAction 클래스의 인스턴스는 아닙니다. getBean(..) 을 수행할 때, 새로운 스프링 빈을 하나 만드는 것으로 보입니다.
제가 뭔가 잘못된 관점을 가지고 있는 것 같아서 아래와 같이 문의 드립니다.
질문1. filter 에서 수행될 Action 클래스의 인스턴스를 얻을 수 있나요?
질문2. Action 클래스의 name 이라는 필드에 "John"이라는 값을 filter에서 삽입할 수 있나요?
질문3. 위와 같이 하려면 non-singletone으로 가는게 맞지요?
부디 잘못된 제 개념을 잡아주시어요.
고맙습니다.