Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SpringMVC如何从会话范围获取bean,当它';的构造函数被调用_Java_Spring_Spring Mvc - Fatal编程技术网

Java SpringMVC如何从会话范围获取bean,当它';的构造函数被调用

Java SpringMVC如何从会话范围获取bean,当它';的构造函数被调用,java,spring,spring-mvc,Java,Spring,Spring Mvc,我对Springframework非常陌生(您可能会猜到),遇到了一个非常需要帮助的情况 我这里有一个J2EE应用程序,在tomcat上运行,有很多旧代码。无论如何,我们决定对某些任务使用Spring框架。例如,我们希望将安全对象(包含用户名和其他与身份验证相关的属性)存储为会话范围的bean。 由于有大量旧代码调用此“安全对象”的构造函数,我的问题如下: 该对象是从会话中获得的(以spring能够实现的任何神奇方式),还是构造函数调用将生成一个全新的对象 我读过一些关于“自动布线机制”的书。。

我对Springframework非常陌生(您可能会猜到),遇到了一个非常需要帮助的情况

我这里有一个J2EE应用程序,在tomcat上运行,有很多旧代码。无论如何,我们决定对某些任务使用Spring框架。例如,我们希望将安全对象(包含用户名和其他与身份验证相关的属性)存储为会话范围的bean。 由于有大量旧代码调用此“安全对象”的构造函数,我的问题如下:

该对象是从会话中获得的(以spring能够实现的任何神奇方式),还是构造函数调用将生成一个全新的对象

我读过一些关于“自动布线机制”的书。。。这对我有帮助吗


谢谢你的回答和时间

如果使用
new
操作符,则您自己构造对象,并调用构造函数。通过
new
创建对象时不涉及Spring。如果使用
new
操作符,则您自己构造对象并调用构造函数。通过
new

创建对象时,Spring不参与。如果您的代码通过调用类的构造函数来创建安全对象的实例,即通过调用
new security()
,它每次都会得到一个new实例

在spring applicationContext.xml文件中为安全对象声明一个bean。要设置安全对象会话的作用域,需要将其
作用域
声明为
会话
,并将其设置为代理

<bean id="securityObject" class="com.xyz.Security" scope="session">
    <aop:scoped-proxy /> <!-- important -->
</bean>
Spring将负责为每个会话创建
安全性的实例。第1行调用返回的对象不是实际的
Security
对象,而是代理对象。当在第2行调用
securityObject.doSomething()
时,代理对象将查找为该会话创建的实际对象,并将调用委托给它。这将由Spring管理

注意,要在第2行获取bean,首先需要ApplicationContext对象的句柄。如何获取该对象将取决于调用代码的位置编辑:统一获取的一种简单方法是实现接口


注意:您可以通过Spring将bean连接起来,而不是从应用程序上下文获取bean,但这将要求您为所有需要安全对象的客户端声明bean。由于您正在修改现有应用程序,我认为上述方法更好。

如果您的代码通过调用类的构造函数(即通过调用
new security()
)来创建安全对象的实例,则每次都会得到一个新的实例

在spring applicationContext.xml文件中为安全对象声明一个bean。要设置安全对象会话的作用域,需要将其
作用域
声明为
会话
,并将其设置为代理

<bean id="securityObject" class="com.xyz.Security" scope="session">
    <aop:scoped-proxy /> <!-- important -->
</bean>
Spring将负责为每个会话创建
安全性的实例。第1行调用返回的对象不是实际的
Security
对象,而是代理对象。当在第2行调用
securityObject.doSomething()
时,代理对象将查找为该会话创建的实际对象,并将调用委托给它。这将由Spring管理

注意,要在第2行获取bean,首先需要ApplicationContext对象的句柄。如何获取该对象将取决于调用代码的位置编辑:统一获取的一种简单方法是实现接口

注意:您可以通过Spring将bean连接起来,而不是从应用程序上下文获取bean,但这将要求您为所有需要安全对象的客户端声明bean。因为您正在修改现有的应用程序,所以我认为上面的方法更好