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