[SPRING] jsp 2.0 SimpleTag에 스프링 빈을 주입하는 방법?
SPRINGjsp 2.0 SimpleTag에 스프링 빈을 주입하는 방법?
현재 spring beans가 필요한 jsp 2.0 태그는 다음 코드를 사용합니다.
ac = WebApplicationContextUtils.getWebApplicationContext( servletContext);
ac.getBeansOfType(MyRequestedClass.class);
나는 처음으로 일치하는 bean을 얻는다.
이 코드는 정상적으로 작동하지만 태그가 호출 될 때마다 발생하기 때문에 봄 콩을 찾는 데 페이지 렌더링 시간의 절반을 소비한다고하는 바람직하지 않은 단점이 있습니다. 콩을 응용 프로그램 범위 또는 적어도 세션 범위에 넣으려고 생각했습니다. 그러나 실제로이 문제를 처리하는 가장 영리한 방법은 무엇입니까?
해결법
-
==============================
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.더 간단한 방법은 태그 클래스에 @Configurable 주석을 사용하는 것입니다. 그러면 태그가 초기화 될 때 Spring이 자동으로 종속성을 연결하게됩니다. 필요한 의존성은 @AutoWired 어노테이션으로 태그 될 수 있고 Spring 컨테이너 내에서 태그가 초기화되지 않아도 Spring은 의존성에서 연결된다.
더 간단한 방법은 태그 클래스에 @Configurable 주석을 사용하는 것입니다. 그러면 태그가 초기화 될 때 Spring이 자동으로 종속성을 연결하게됩니다. 필요한 의존성은 @AutoWired 어노테이션으로 태그 될 수 있고 Spring 컨테이너 내에서 태그가 초기화되지 않아도 Spring은 의존성에서 연결된다.
-
==============================
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가 표시됩니다 :)
from https://stackoverflow.com/questions/1296052/how-to-inject-spring-beans-into-a-jsp-2-0-simpletag by cc-by-sa and MIT license