spring中reques的运用

来源:互联网 发布:2016淘宝助理手机版 编辑:程序博客网 时间:2024/06/07 02:25

与其他spring文件不同的是,运用request的spring不需要再src建立bean.xml文件,只需在web.xml文件同目录下建立一个application.xml文件

+当通过Spring容器创建Bean时,不仅可以完成Bean的初始化工作,还可以为Bean指定作用域。在Bean元素添加scope属性即可配置Bean的作用域。Spring支持一下五种作用域:
 1. singleton:单例模式,在整个Spring Ioc容器中,singleton作用域的Bean只会产生一实例。 

2. prototype:通过getBean()方法获取Bean实例或向其他Bean注入Bean时,Spring Ioc容器都会新new一个Bean实例作为方法返回的Bean或注入的Bean实例。
说简单点就是如果你设置的是scope="prototype" 你输入的对象是皇马,那么第二次产生的对象就不是皇马 而是皇马X。由于每次运行都会产生一个新的对象,所以不建议用prototype,因为它会加大系统开销。

3. request:对于一次HTTP请求,request作用域只产生一个Bean实例,请求结束时Bean实例将会销毁。也就说两次login请求,将会产生两个userBean。每一次login请求多次调用userBean会得到同一个实例。只有在Web应用中使用Spring时,该作用域才有效。
 
4. session:对于一次HTTP会话,session作用域只产生一个Bean实例,session销毁时Bean实例将会销毁。也就是说用户A和用户B都请求了查询操作,将会产生两个queryBean实例。A用户多个请求查询操作,将会产生一个queryBean实例。只有在Web应用中使用Spring时,该作用域才有效。 

5. global session:每个全局的HTTP session对应一个bean实例。在典型的情况下,仅在使用porlet context的时候才有效。只有在Web应用中使用Spring时,该作用域才有效。(可以了理解成jsp的application内置对象作用范围)

+比较常用的是singleton和prototype作用域。对于singleton作用域的Bean,每次通过id获取Bean都是同一个实例,由Spring负责跟踪Bean的状态,维护Bean声明周期内的行为。对于prototype作用域的Bean,每个通过id获取Bean都是一个新的Bean实例,Spring会通过new关键字创建这个Bean实例,Spring不负责管理维护Bean实例的状态和行为。如果元素不指定scope属性将会默认为singleton作用域。prototype作用域会增加系统的开销,因为每次都需要创建一个对象(申请内存、销毁实例、完成垃圾回收等工作)。singleton作用域的Bean一旦创建成功,就可以重复使用。因此,应该尽量避免使用prototype作用域。


并且它是需要写视图层的 也就是JSP


具体代码如下:

测试层:


配置文件application.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">

<bean id="p" class="com.cn.Person"
scope="request"/>
</beans>

web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>SpringRequestDemo</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
</web-app>


jsp文件:

<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<%@ page import="org.springframework.web.context.*" %>
<%@ page import="org.springframework.web.context.support.*" %>
<%@ page import="com.cn.Person"%>


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Spring Bean的作用域</title>
</head>
<body>
<%
// 获取Web应用初始化的Spring容器


WebApplicationContext ctx=WebApplicationContextUtils.getWebApplicationContext(application);
// 两次获取容器中id为p的Bean


Person p1 = (Person)ctx.getBean("p");
Person p2 = (Person)ctx.getBean("p");
out.println((p1 == p2) + "<br/>");
out.println(p1);
out.println(p2);
%>


</body>
</html>

原创粉丝点击