java - 如何将 spring bean 注入(inject) jsp 2.0 SimpleTag?

标签 java spring jsp jsp-tags

目前我需要spring bean的jsp 2.0标签使用这个代码:

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

我刚刚得到第一个匹配的 bean。

这段代码运行良好,但有一个不受欢迎的缺点,即我花了大约一半的页面渲染时间来查找 spring bean,因为每次调用标签时都会发生这种情况。我在想也许将 bean 放入应用程序范围或至少 session 范围。但真正处理这个问题的最聪明的方法是什么?

最佳答案

我的第一个想法是,你确定调用 spring 很昂贵吗?这些东西已经过大量优化,所以在尝试优化之前确保它确实是一个问题。

假设它一个问题,那么一个替代方案是InternalResourceViewResolverexposeContextBeansAsAttributesexposedContextBeanNames属性。您可以使用其中一种(但不能同时使用)将部分或全部 bean 公开为 JSP 属性。

这增加了将 Spring bean 实际注入(inject)标记类的可能性。例如,在您的 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 类型的属性 thing,则 myBean spring bean 应该被注入(inject)为一个普通的 JSP 属性。

关于java - 如何将 spring bean 注入(inject) jsp 2.0 SimpleTag?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1296052/

相关文章:

java - 如何在 Spring MVC 3.0 中创建可重用组件

java - 这是对 Java 默认接口(interface)方法的可接受使用吗?

java - 无法使用 API 29 android studio 在模拟器中运行应用程序

java - 使用java2D在圆中找到点的快速方法

java - 如何在不重新启动服务器的情况下更改注释的值

java - 在请求 Dispatcher.forward 方法之后从另一个 Servlet 调用一个 Servlet

java - 如何检测文件系统在java中发生了变化

java - 将 ControllerClassNameHandlerMapping 与 @Controller 一起使用并扩展 AbstractController

java - 为什么我需要在 Controller 中使用 spring 注解?

java - Spring:将字符串从 View 转换为日历对象