bean的scope

1. singleton, scope默认值为singleton

spring容器中 scope='singleton'与单例模式不是一个意思。标记为singleton的bean是由容器来保证这种类型的bean在同一个容器中只存在一个共享实例;而Singleton模式则是保证在同一个Classloader中只存在一个这种类型的实例。

可以从两个方面来看待singleton的bean所具有的特性。

1). 对象实例数量。 singleton类型的bean定义,在一个容器中只存在一个共享实例,所有对该类型bean的依赖都引用这一单一实例。
    2). 对象存活时间。 singleton类型bean定义, 从容器启动,到它第一次被请求而实例化开始,只要容器不销毁或者退出,该类型bean的单一实例就会一直存活。

2. prototype

针对声明为拥有prototype scope的bean定义,容器在接到该类型对象的请求的时候,会每次都重新生成一个新的对象实例给请求方。 容器每次返回给请求方一个新的对象实例之后,容器就不再拥有当前返回对象的引用,就任由这个对象实例“自生自灭”了。

对于那些请求方不能共享使用的对象类型,应该将其bean定义的scope设置为prototype。这样,每个请求方可以得到自己对应的一个对象实例。通常,声明prototype的scope的bean定义类型,都是一些有状态的,比如保存每个顾客信息的对象。

3. factorybean

FactoryBean是Spring容器提供的一种可以扩展容器对象实例化逻辑的接口,请不要将其与容器名称BeanFactory相混淆。FactoryBean,其主语是Bean,定语为Factory,也就是说,它本身与其他注册到容器的对象一样,只是一个Bean而已,只不过,这种类型的Bean本身就是生产对象的工厂(Factory)。

4. 方法注入

被注入的方法必须满足如下定义:

<public|protected> [abstract] <return-type> theMethodName(no-arguments);

<bean id="newsBean" class="..domain.FXNewsBean" scope="prototype">
</bean><bean id="mockPersister" class="..impl.MockNewsPersister"><lookup-method name="getNewsBean" bean="newsBean"/>
</bean>

通过<lookup-method>的name属性指定需要注入的方法名,  bean属性指定需要注入的对象,当getNewsBean方法被调用的时候,容器可以每次返回一个新的FXNewsBean类型的实例。

5. 方法替换

与方法注入只是通过相应方法为主体对象注入依赖对象不同,方法替换更多体现在方法的实现层面上,它可以灵活替换或者说以新的方法实现覆盖掉原来某个方法的实现逻辑。基本上可以认为,方法替换可以帮助我们实现简单的方法拦截功能。基本做到AOP(面向切面编程)的功能了。

方法替换需要我们提供的类实现org.springframework.beans.factory.support.MethodReplacer接口

public class FXNewsProviderMethodReplacer implements MethodReplacer {private static final transient Log logger = LogFactory.getLog(FXNewsProviderMethodReplacer.class);public Object reimplement(Object target, Method method, Object[] args) throws Throwable {logger.info("before executing method["+method.getName()+"] on Object["+target.getClass().getName()+"].");System.out.println("sorry,We will do nothing this time.");logger.info("end of executing method["+method.getName()+"] on Object["+target.getClass().getName()+"].");return null;}
}
<bean id="djNewsProvider" class="..FXNewsProvider"><constructor-arg index="0"><ref bean="djNewsListener"/></constructor-arg><constructor-arg index="1"><ref bean="djNewsPersister"/></constructor-arg><!-- 方法替换 --><replaced-method name="getAndPersistNews" replacer="providerReplacer"></replaced-method>
</bean><bean id="providerReplacer" class="..FXNewsProviderMethodReplacer">
</bean><!--其他bean配置-->
...

《spring揭秘》读书笔记三相关推荐

  1. Redis理解内存《Redis开发与运维读书笔记》

    文章目录 内存的消耗 内存划分 内存管理 内存优化 内存的消耗 可以使用info memory 查看内存消耗. 内存划分 对象内存 = sizeof(key) + sizeof(value) 应避免使 ...

  2. 【Redis】《Redis 开发与运维》笔记-Chapter12-开发运维的“ 陷阱”

    十二.开发运维的" 陷阱" 1.Linux配置优化之内存分配控制 1)vm.overcommit_memory Linux操作系统对大部分申请内存的请求都回复yes,以便能运行更多 ...

  3. Redis开发与运维 必备-电子书

    Redis开发与运维电子书 fulei出版 链接: https://pan.baidu.com/s/12rlHhOKP7_72GE8a74lN1g 密码: eep2 复制这段内容后打开百度网盘手机Ap ...

  4. 「Redis开发与运维」读书笔记

    第一章 初识Redis Redis的8个重要特性 速度快 内存存储数据 C语言实现 单线程架构,避免多线程竞争问题 Redis源码优化好 基于键值对的数据结构服务器 Redis 值可支持多种数据结构, ...

  5. <Redis开发与运维>一书阅读笔记记录

    文章目录 前言 第1章:初始redis 盛赞redis redis特性 redis使用场景 第2章:API的理解和使用 预备知识 全局命令 数据结构和内部编码 单线程架构 字符串 命令 内部编码 典型 ...

  6. 百度王一男: DevOps 的前提是拆掉业务-开发-测试-运维中间的三面墙

    这是一个创建于 375 天前的主题,其中的信息可能已经有所发展或是发生改变. 由数人云.优维科技.中生代社区联合发起的 系列 Meetup < DevOps&SRE 超越传统运维之道&g ...

  7. 《Redis开发与运维》读书笔记--初识Redis(一)

    目录 盛赞Redis Redis特性 redis使用场景 redis可以做什么? redis不可以做什么? 关于用好redis的两点建议 本章重点回顾 写在前面: 想必在写项目的过程中,我们很多时候都 ...

  8. 读书笔记:redis开发与运维 基础篇

     redis特性    1>速度快:redis所有数据都是存放在内存中,是redis速度快的主要原因,是有c编写,一般来说用c编写的程序距离操作系统近,执行速度更快,非阻塞I/O,使用epoll ...

  9. Redis开发与运维笔记_1 初识2 API

    目录 概述 第1章 初识Redis 1.1 盛赞Redis 1.2 Redis特性 1.3 配置.启动.操作.关闭Redis 第2章 API的理解和使用 2.1 预备 2.1.1 全局命令 2.1.2 ...

  10. Redis 开发与运维

    Getting Start 高性能 性能优势的体现 C语言实现的内存管理 epoll的I/O多路复用技术+IO连接/关闭/读写通过事件实现异步的非阻塞IO TCP协议 单线程架构,不会因为高并发对服务 ...

最新文章

  1. python关闭读写的所有的文件-Python读写txt文本文件的操作方法全解析
  2. SharpDevelop 5.1 调试一个简单会员管理系统
  3. win32api window2con 模块 -系统注册表操作
  4. 【写作技巧】绪论写作要点
  5. java怎么倒计时_详解java倒计时三种简单实现方式
  6. QTableView修改数据后弹出是否保存的提示框。
  7. visual studio 2010 c++ 打印 Hello world
  8. JS前端实现是否繁体判断,简繁体转换,简体和QQ个性繁体转换
  9. 百度富文本编辑器使用
  10. MacBook Pro 屏幕黑线、条纹、线条、舞台灯、残影、横线这样的排线门问题你遇到了吗?很有可能源于官方的设计缺陷,你该何去何从?
  11. HTTP Error 500.0 - ANCM In-Process Handler Load Failure
  12. matlab语言中的[~,b]=sort(A)用法介绍
  13. a标签在微信iOS版本的解析没有问题,但是在安卓版就解析不出来
  14. html表格一行设置颜色,更改表格中一行的颜色,html
  15. flowable工作流技术学习
  16. 打倒虚伪的动物福利者!
  17. 李飞飞:我怎样走上AI研究之路
  18. 命令行——rm命令(删除)详解
  19. 电力系统暂态稳定性Matlab编程/ Simulink仿真 单机无穷大系统发生各类(三相短路,单相接地,两相接地,两相相间短路)等短路故障
  20. 中国地区的手机号正则表达式

热门文章

  1. 2017-2018-1 20155230 《信息安全系统设计基础》第二周课堂实验
  2. windows 域用户账号验证登陆
  3. C#垃圾回收(GC)
  4. 使用Altera综合工具Quartus II下载到FPGA时无法识别USB-Blaster问题
  5. NLPIR大数据处理技术实现多种类智能挖掘
  6. 感謝有PPStream這種好東西
  7. 操作系统第一篇【引论】
  8. 清理Oracle安装目录里的一些日志信息
  9. 纯css实现responsive list -- 魔力calc
  10. 网站降权的原因以及恢复的方法 (二)