gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 03:58:48 25 4
gpt4 key购买 nike

我有一个旧项目需要与 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com