我正在尝试在spring mvc中使用会话范围bean以及以下bean定义
<bean id="test" class="com.gk.testScope.Test" scope="session">
<property name="name" value="mytest"></property>
<aop:scoped-proxy/>
</bean>
控制器代码
@Controller
public class MyController
{
@Autowired
Test t;
@RequestMapping(value="test1",method=RequestMethod.GET)
public String test1(HttpServletRequest request) {
System.out.println("name"+t.getName());
request.getSession();
return "test1";
}
}
在运行上面的代码时,即使在开始任何会话之前,它也会打印 mytest 。有人可以解释会话范围在这里做什么吗?
答案 0 :(得分:0)
下面的代码行实际上并不创建会话,它获取了servlet容器已经创建的会话。
request.getSession();
现在是重要的东西。如果您不熟悉Spring示波器,那么一开始就有点棘手。
在另一个单例bean中注入一个单独的bean是直观的,也是有意义的。你想把一个不是Singleton的bean注入一个Singleton bean怎么样?注射应按要求进行吗?所以要配置它,我们不能直接注入非单例的bean。我们为非单例bean注入一个代理,然后根据需要注入一个新的bean。
<aop:scoped-proxy/>
上述标记有助于为服务器上创建的每个会话(因为范围是“会话”)创建一个新bean,并根据需要注入控制器。
我相信有人可以用更简单的方式解释。希望这可以帮助。
答案 1 :(得分:0)
spring框架提供了一个控制反转编码框架;这意味着你只需要关注你的业务逻辑并将其作为处理函数写下来,spring框架会处理剩下的事情并调用你的处理函数。
例如,在mvc spring框架中,http请求处理,http会话处理,bean生命周期管理都是在spring-framework中完成的,你只需编写&#34; test1()&# 34;客户端点击URL&#34; / test1&#34;。
时调用的函数当客户端启动与spring Web服务器的HTTP会话时,框架将创建会话范围,并且将创建所有会话范围bean。当客户端发送HTTP请求时,框架将创建一个Request范围和所有创建请求级别范围bean。
请参阅春季参考文档中的6.5 Bean scopes。