`
shuofenglxy
  • 浏览: 192703 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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>/*</url-pattern>
</filter-mapping>

另外,从 2.0 开始,可以自己定义作用域,但需要实现 scope ,并重写 get remove 方法

特别要引起注意的是:
   一般情况下前面两种作用域是够用的,但如果有这样一种情况: singleton 类型的 bean 引用一个 prototype bean 时会出现问题,因为 singleton 只初始化一次,但 prototype 每请求一次都会有一个新的对象,但 prototype 类型的 bean singleton 类型 bean 的一个属性,理所当然不可能有新 prototpye bean 产生,与我们的要求不符

解决方法:
1.
放弃 Ioc ,这与设计初衷不符,并代码间会有耦合
2
Lookup 方法注入,推荐

但在用 Lookup 方法注入时也需要注意一点:需要在引用的 Bean 中定一个一个抽象地返回被引用对象的方法

package com.huyong.lookup;

import java.util.Calendar;

/**
* @author HuYong Email:yate7571@hotmail.com
*/
public class CurrentTime {
private Calendar now = Calendar.getInstance();

public void printCurrentTime() {
System.out.println("Current Time:" + now.getTime());
}

}


package com.huyong.lookup;

/**
* @author HuYong Email:yate7571@hotmail.com
*/
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;

/**
* @author HuYong Email:yate7571@hotmail.com
*/
public class LookupMain {

/**
* @param args
* @throws Exception
*/
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 的好处!
简单就是美!!

 

分享到:
评论

相关推荐

    base zz zz zz zz

    base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz base zz zz zz zz zz

    小马哥讲 Spring AOP 编程思想 - API 线索图.pdf

    - **DefaultAdvisorAutoProxyCreator**:继承自AbstractAutoProxyCreator,是Spring中默认的自动代理创建器。 4. AOP代理对象的来源和类型 - **TargetSource(目标源)**:被代理对象的来源。 - **...

    Spring3.0中文版

    Spring框架是Java开发中的核心组件,它以其模块化、松耦合的设计理念,极大地简化了企业级应用的构建。Spring3.0是该框架的一个重要版本,它引入了许多新特性和改进,为开发者提供了更强大的功能和更好的灵活性。在...

    atguigu_springboot2_zz-master.zip

    `atguigu_springboot2_zz-master`项目中,可以看到SpringBoot的起步依赖如`spring-boot-starter-web`、`spring-boot-starter-data-jpa`等,它们是预配置的Maven或Gradle模块,包含了开发特定功能所需的依赖,例如...

    Spring整理1

    在Spring应用中,我们通常通过ApplicationContext来管理Bean的生命周期和依赖注入。下面我们将深入探讨Spring初始化、Bean的配置以及一些常用的Bean类型。 首先,Spring的初始化主要是通过ApplicationContext接口来...

    Spring源码出错,缺失cglib.3.2.6 与 objenesis.2.6

    理解CGLIB和Objenesis的工作原理以及它们在Spring框架中的作用,对于深入学习和使用Spring具有重要意义。这两个库不仅帮助Spring实现了核心功能,还为其他需要动态生成类或实例化的Java项目提供了强大的支持。因此,...

    Spring2.5中文版CHM

    - Spring 2.5引入了对JSR-250规范的支持,例如`@PostConstruct`和`@PreDestroy`注解,使得在bean生命周期管理中更加方便。此外,还增强了切面表达式语言(AspectJ)的支持,允许更精确地定义切点和通知。 3. **...

    基于Spring MVC+Spring+Mybatis+Mysql 客户关系管理系统 SSM毕业设计

    SSM框架是Java Web开发中常用的一种组合,由Spring MVC、Spring和Mybatis三个组件构成,用于构建高效、灵活的Web应用。这个基于SSM的客户关系管理系统(CRM)毕业设计,利用了Maven进行项目构建,确保了依赖管理的便捷...

    Struts、Spring、Hibernate框架整合

    2. **配置Struts**:在Struts的配置文件中,将Action类设置为Spring管理的Bean,这样Struts在调用Action时会从Spring容器中获取实例。 3. **配置Hibernate**:配置Hibernate的SessionFactory,并在Spring配置文件中...

    ZZ561401.CAB

    ZZ561401.CAB ZZ561401.CAB ZZ561401.CAB

    SpringMVC+Spring+mybatis+Mysql 客户关系管理系统 可用于毕业设计

    在本项目中,Spring负责管理bean的生命周期和装配,以及事务控制,使得业务逻辑和数据访问层得以解耦,降低了系统的复杂度。 3. **Mybatis**:Mybatis是一款优秀的持久层框架,它支持定制化SQL、存储过程以及高级...

    wincc AX NF ZZ

    wincc SIMATIC WinCC是第一个使用最新的32位技术的过程监视系统,具有良好的开放性和灵活性。 从面市伊始,用户就对SIMATIC WinCC印象深刻。

    超出NLO QCD的高横向动量的ZZ产生

    最重要的是,我们将来自胶子-胶子通道的胶子-融合ZZ + jet贡献添加到我们的合并样本中,胶子-胶子通道正式是N3LO,并在NLO上为胶子-融合机理提供了近似结果。 这些预测是使用VBFNLO软件包获得的,包括Z玻色子的轻子...

    Spring Security手册

    下面将详细阐述Spring Security的一些核心概念、功能以及如何在实际项目中应用。 1. **核心概念** - **Authentication(认证)**: 用户身份验证,确认用户是否为他们声称的人。Spring Security提供了多种认证机制...

    zz CAD快速计算长度插件

    在CAD中想要快速测量长度,在CAD工具栏找到加载应用程序,再点击加载 加载成功后在输入栏输入“zz”(不分大小写)在选择你需要测量的线段即可。

    spring-framework-4.0.4.RELEASE-jar包

    Spring Framework作为Java领域中的一个里程碑,以其强大的功能和灵活的设计,成为Web开发领域的首选框架。4.0.4.RELEASE版本是Spring的重要里程碑,它带来了许多改进和优化,旨在提升开发效率,增强应用程序的稳定性...

    ZZ_MODIFIED_GEEBINF.ENS.zip

    标题中的"ZZ_MODIFIED_GEEBINF.ENS.zip"是一个压缩包文件,暗示其内容可能包含对EndNote引用样式的一种修改。EndNote是一款流行的参考文献管理软件,它允许用户存储、组织和格式化引用文献。"ZZ_MODIFIED_GEEBINF....

    ZZ_MODIFIED_GEEBINF.ENS.zip endnote的样式文件

    标题中的“ZZ_MODIFIED_GEEBINF.ENS.zip”是一个压缩包文件,主要包含一个名为“ZZ_MODIFIED_GEEBINF.ENS”的文件。这个文件是一种特殊格式,用于定义EndNote的引用样式。EndNote是一款强大的文献管理软件,广泛应用...

    spring+springmvc+mybatis

    - 配置Spring:设置Spring的IoC容器,定义Bean的实例化和依赖关系。 - 配置SpringMVC:配置DispatcherServlet、拦截器、视图解析器等,处理HTTP请求。 - 配置MyBatis:创建SqlSessionFactory,配置数据源、事务...

Global site tag (gtag.js) - Google Analytics