天天看点

ZZ SPRING中BEAN的作用域

本文来自百度文库, http://wenku.baidu.com/view/424326270722192e4536f650.html

关于bean的作用域,还可以参见 http://blueram.iteye.com/blog/352846

Spring Bean 作用域介绍:

singleton : Spring  Ioc 容器只会创建该 Bean 的唯一实例,所有的请求和引用都只使用这个实例

Property:  每次请求都创建一个新实例

request:    在一次 Http 请求中,容器会返回该 Bean 的同一个实例,而对于不同的用户请求,会返回不同的实例。需要注意的是,该作用域仅在基于 Web 的 Spring ApplicationContext 情形下有效,以下的 session 和 global Session 也是如此

session :同上,唯一的区别是请求的作用域变为了 session

global session :全局的 HttpSession 中,容器会返回该 bean 的同一个实例,典型为在是使用 portlet context 的时候有效(这个概念本人也不懂)

注意:如果要用到 request , session , global session 时需要配置

servlet2.4 及以上:

在 web.xml 中添加:

<listener>

    <listener-class>org.springframework.web.context.scope.RequestContextListener />

</listener>

servlet2.4 以下:

需要配置一个过滤器

<filter>

    <filter-name>XXXX</filter-name>

    <filter-class>org.springframework.web.filter.RequestContextFilter</filter-class>

<filter-mapping>

    <filter-name>XXXX</filter-name>

    <url-pattern>

public class CurrentTime {

private Calendar now = Calendar.getInstance();

public void printCurrentTime() {

System.out.println("Current Time:" + now.getTime());

}

}

package com.huyong.lookup;

public abstract class LookupBean {

private CurrentTime currentTime;

public CurrentTime getCurrentTime() {

return currentTime;

}

public void setCurrentTime(CurrentTime currentTime) {

this.currentTime = currentTime;

}

public abstract CurrentTime createCurrentTime();

}

<?xml version="1.0" encoding="UTF-8"?>

<beans xmlns="http://www.springframework.org/schema/beans"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring -beans-2.0.xsd">

<bean id="currentTime" class="com.huyong.lookup.CurrentTime"

scope="prototype ">

</bean>

<bean id="lookupBean" class="com.huyong.lookup.LookupBean"

scope="singleton ">

<lookup-method name="createCurrentTime" bean="currentTime" />

<property name="currentTime" ref="currentTime"></property>

</bean>

</beans>

Main Test :

package com.huyong.lookup;

import org.springframework.beans.factory.BeanFactory;

import org.springframework.beans.factory.xml.XmlBeanFactory;

import org.springframework.core.io.ClassPathResource;

public class LookupMain {

public static void main(String[] args) throws Exception {

ClassPathResource resource = new ClassPathResource(

"applicationContext.xml");

BeanFactory factory = new XmlBeanFactory(resource);

LookupBean lookupBean = (LookupBean) factory.getBean("lookupBean");

System.out.println("----------first time---------");

System.out.println("getCurrentTime:");

lookupBean.getCurrentTime().printCurrentTime();

System.out.println("createCurrentTime:");

lookupBean.createCurrentTime().printCurrentTime();

Thread.sleep(12345);

System.out.println("---------second time---------");

System.out.println("getCurrentTime:");

LookupBean lookupBean02 = (LookupBean) factory.getBean("lookupBean");

lookupBean02.getCurrentTime().printCurrentTime();

System.out.println("createCurrentTime:");

lookupBean02.createCurrentTime().printCurrentTime();

}

}

感觉 Spring 的东西比较杂,学好 spring 一定要明白反射和代理是怎么回事!

渐渐的也挺会到了 Spring 的好处!

简单就是美!!

继续阅读