java - 如何在 Spring 2.5 中处理自定义 Autowiring 对象?

标签 java spring spring-mvc

我有一个旧项目需要与 Spring 2.5.x 集成(3.0 是不可能的)。

我创建了一个 bean,它必须自己初始化它的字段 userSession:

public class SomeBean {
    UserSession userSession;

    @PostContrust
    public void init() {
        HttpSession session = WebContext.current().getSession();
        userSession = (UserSession) session.getAttribute("userSession");
    }
}

是否可以编写某种 Autowiring 处理程序来解析 userSession 并将其 Autowiring 传递给 Spring,所以我的 bean 看起来就像:

public class SomeBean {
    @Autowire UserSession userSession;
}

处理程序如下:

public class AutowireHanlder {
    public boolean isCandidate(Class<?> type) {
        return type.equals(UserSession.class);
    }

    public Object resolve(Class<?> type) {
        HttpSession session = WebContext.current().getSession();
        return (UserSession) session.getAttribute("userSession");
    }
}

最佳答案

我会使用 session 范围的 FactoryBean 来做到这一点:

public class UserSessionFactoryBean extends AbstractFactoryBean<UserSession> {

    @Override
    public Class<?> getObjectType() {
        return UserSession.class;
    }

    @Override
    protected UserSession createInstance() throws Exception {
        HttpSession session = WebContext.current().getSession();
        return (UserSession) session.getAttribute("userSession");   
    }

}

UserSessionFactoryBean 定义为一个 bean:

<bean scope="session" class="com.xyz.UserSessionFactoryBean"/>

... 然后您应该能够将 UserSession Autowiring 到任何其他 bean 中。

这里的复杂性在于 UserSessionFactoryBean 必须是 session-scoped (参见 bean scopes 上的文档),因为它必须为每个 HttpSession 返回一个新值。这意味着它被 Autowiring 到的任何 bean 都必须是 session 范围的,否则它将失败。您可以使用 scoped-proxies 绕过此限制.

关于java - 如何在 Spring 2.5 中处理自定义 Autowiring 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4792140/

相关文章:

spring - OSGi 容器中的 web.xml

java - 如何使用 Spring MVC 和 Spring JdbcTemplate RowCallbackHandler 和流结果?

java - 线程 "main"org.jasypt.exceptions.EncryptionOperationNotPossibleException 中出现异常

java - 复选框和 AlertDialog

java - Spring /hibernate 。在Web服务中将字符串转换为具有相同时区的日期并插入到SQL中

Spring Boot - Hibernate 自定义约束不注入(inject)服务

java - OutOfMemoryError : Java heap space in solr, 但堆未满

spring - 如何在 AWS Lambda 函数中从 AWS API Gateway URI 访问请求和路径变量

angular - Spring Mvc 和 Angular2 在 Tomcat 服务器上运行

java - RESTful servlet URL - web.xml 中的 servlet 映射