복붙노트

[SPRING] jsp 2.0 SimpleTag에 스프링 빈을 주입하는 방법?

SPRING

jsp 2.0 SimpleTag에 스프링 빈을 주입하는 방법?

현재 spring beans가 필요한 jsp 2.0 태그는 다음 코드를 사용합니다.

ac = WebApplicationContextUtils.getWebApplicationContext( servletContext);
ac.getBeansOfType(MyRequestedClass.class);

나는 처음으로 일치하는 bean을 얻는다.

이 코드는 정상적으로 작동하지만 태그가 호출 될 때마다 발생하기 때문에 봄 콩을 찾는 데 페이지 렌더링 시간의 절반을 소비한다고하는 바람직하지 않은 단점이 있습니다. 콩을 응용 프로그램 범위 또는 적어도 세션 범위에 넣으려고 생각했습니다. 그러나 실제로이 문제를 처리하는 가장 영리한 방법은 무엇입니까?

해결법

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

    1.내 첫 번째 생각은 봄철 전화가 비싸다는 겁니까? 이 제품은 꽤 많이 최적화되어 있으므로 최적화하기 전에 실제로 문제가 있는지 확인하십시오.

    내 첫 번째 생각은 봄철 전화가 비싸다는 겁니까? 이 제품은 꽤 많이 최적화되어 있으므로 최적화하기 전에 실제로 문제가 있는지 확인하십시오.

    문제가 있다고 가정하면 InternalResourceViewResolver의 exposeContextBeansAsAttributes 및 exposedContextBeanNames 속성이 대신 사용할 수 있습니다. 둘 중 하나만 사용하여 Bean의 일부 또는 전체를 JSP 속성으로 표시 할 수 있습니다.

    이렇게하면 스프링 빈을 태그 클래스에 실제로 삽입 할 가능성이 높아진다. 예를 들어 Spring 컨텍스트에서 다음을 수행 할 수 있습니다.

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="exposeContextBeansAsAttributes" value="true"/>
    </bean>
    
    <bean id="myBean" class="com.x.MyClass"/>
    

    귀하의 JSP :

    <MyTag thing="${myBean}"/>
    

    따라서 MyTag가 MyClass 유형의 속성을 정의하면 myBean 스프링 빈은 일반 JSP 속성으로 주입되어야합니다.

  2. ==============================

    2.더 간단한 방법은 태그 클래스에 @Configurable 주석을 사용하는 것입니다. 그러면 태그가 초기화 될 때 Spring이 자동으로 종속성을 연결하게됩니다. 필요한 의존성은 @AutoWired 어노테이션으로 태그 될 수 있고 Spring 컨테이너 내에서 태그가 초기화되지 않아도 Spring은 의존성에서 연결된다.

    더 간단한 방법은 태그 클래스에 @Configurable 주석을 사용하는 것입니다. 그러면 태그가 초기화 될 때 Spring이 자동으로 종속성을 연결하게됩니다. 필요한 의존성은 @AutoWired 어노테이션으로 태그 될 수 있고 Spring 컨테이너 내에서 태그가 초기화되지 않아도 Spring은 의존성에서 연결된다.

  3. ==============================

    3.이를 달성하는 또 다른 방법은 정적 속성을 사용하여 종속성을 유지하는 것입니다. 다음과 같이하면됩니다.

    이를 달성하는 또 다른 방법은 정적 속성을 사용하여 종속성을 유지하는 것입니다. 다음과 같이하면됩니다.

    public class InjectedTag extends SimpleTagSupport {
    //In order to hold the injected service, we have to declare it as static
        private static AService _service;   
    /***/   
    @Override   
    public void doTag() throws IOException {    
              getJspContext().getOut().
              write("Service injected: " + _service + "<br />");    
    }   
    public void setService(AService service) { 
            _service = service;     
    } 
    }
    

    applicationcontext에서 JSP 태그가 Spring에 의해 시작될 수있는 기회를 얻을 수 있도록 둘 다 등록해야합니다. 우리는 마법과 함께 ...

    <bean id="aService" class="com.foo.AService">
      <!-- configure the service. -->
    </bean>
    <bean class="com.foo.InjectedTag" >
      <property name="service"><ref local="aService"/></property>
    </bean>
    

    쿨 허, 이제 우리의 JSP 태그에 aService가 표시됩니다 :)

  4. from https://stackoverflow.com/questions/1296052/how-to-inject-spring-beans-into-a-jsp-2-0-simpletag by cc-by-sa and MIT license