如何将弹簧豆注入jsp 2.0 SimpleTag?

2022-09-04 08:10:24

目前,我需要 spring bean 的 jsp 2.0 标签使用以下代码:

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

我刚刚得到第一个匹配的豆子。

这段代码工作正常,但有一个不希望的缺点,即我花了大约一半的页面渲染时间来查找春豆,因为每次调用标签时都会发生这种情况。我在想也许把bean放到应用程序范围或至少会话范围。但是,处理这个问题的最聪明方法是什么?


答案 1

我的第一个想法是,你确定春天的电话很贵吗?这些东西经过了大量优化,因此在尝试优化之前,请确保它实际上是一个问题。

假设这是一个问题,那么另一种方法是 和 属性。您可以使用其中一个(但不能同时使用两个)将部分或全部 Bean 公开为 JSP 属性。exposeContextBeansAsAttributesexposedContextBeanNamesInternalResourceViewResolver

这提高了将Spring Bean实际注入标签类的可能性。例如,在您的春季环境中,您可以拥有:

<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}"/>

SO 如果定义了一个属性类型,那么弹簧豆应该被注入为一个普通的 JSP 属性。MyTagthingMyClassmyBean


答案 2

一种更简单的方法是在标记类上使用@Configurable注释,这将使Spring在初始化标记时自动连接依赖项。然后,可以使用@AutoWired注释标记任何必需的依赖项,并且即使标记未在Spring容器中初始化,Spring也会在依赖项中连接。