복붙노트

[SPRING] Spring XML 메타 데이터 설정에서 빈에 대한 ServletContext 속성을 설정하는 방법

SPRING

Spring XML 메타 데이터 설정에서 빈에 대한 ServletContext 속성을 설정하는 방법

그래서 여기에 검색했지만 솔루션을 찾을 수 없습니다. 나는 다음과 같은 XML 메타 데이터를 가지고있다.

<bean class="javax.servlet.ServletContext" id="servletContext" />

<bean class="com.abc.ProductController">
    <property name="servletContext" ref="servletContext"/>
</bean>

이 구성에서는 "javax.servlet.ServletContext"가 인터페이스이고 id가 servletContext 인 빈을 생성 할 수 없다는 예외가 발생합니다. ProductController 클래스는 수정할 수없는 항아리에 있지만 응용 프로그램의 bean으로 원합니다. Autowired ServletContext 속성이 있습니다.

해결법

  1. ==============================

    1.XML 설정 스프링 애플리케이션에서 ServletContext를위한 빈을 생성해야한다면 ServletContextAware를 구현하는 BeanFactory 를 사용할 수있다.

    XML 설정 스프링 애플리케이션에서 ServletContext를위한 빈을 생성해야한다면 ServletContextAware를 구현하는 BeanFactory 를 사용할 수있다.

    public class ServletContextFactory implements FactoryBean<ServletContext>,
                ServletContextAware{
        private ServletContext servletContext;
    
        @Override
        public ServletContext getObject() throws Exception {
            return servletContext;
        }
    
        @Override
        public Class<?> getObjectType() {
            return ServletContext.class;
        }
    
        @Override
        public boolean isSingleton() {
            return true;
        }
    
        @Override
        public void setServletContext(ServletContext servletContext) {
            this.servletContext = servletContext;
        }
    
    }
    

    다음을 선언 할 수 있습니다.

    <bean class="org.app.ServletContextFactory" id="servletContext" />
    
    <bean class="com.abc.ProductController">
        <property name="servletContext" ref="servletContext"/>
    </bean>
    
  2. ==============================

    2.그냥 컨트롤러에서 컨텍스트를 autowire :

    그냥 컨트롤러에서 컨텍스트를 autowire :

    @Autowired
    private ServletContext context;
    
  3. ==============================

    3.서블릿 컨텍스트가 서블릿 컨테이너에 의해 제어되므로 XML에서 서블릿 컨텍스트를 참조 할 수 없습니다.

    서블릿 컨텍스트가 서블릿 컨테이너에 의해 제어되므로 XML에서 서블릿 컨텍스트를 참조 할 수 없습니다.

    해결 방법은 com.abc.ProductController가 ServletContextAware를 구현 한 다음 Spring이이를 설정하도록하는 것입니다.

  4. ==============================

    4.자바 설정으로 위의 Serge Ballesta가 만든 ServletContextFactory를 사용하면 :

    자바 설정으로 위의 Serge Ballesta가 만든 ServletContextFactory를 사용하면 :

    @Configuration
    public class WebAppConfiguration {
    
        @Autowired
        private ServletContextFactory servletContextFactory;
    
        @Bean
        public ServletContextFactory servletContextFactory() {
             return new ServletContextFactory();
        }
    }
    
  5. from https://stackoverflow.com/questions/26632529/how-to-set-servletcontext-property-for-a-bean-in-spring-xml-metadata-configurati by cc-by-sa and MIT license