Spring(07)——单例注入多例之lookup-method
2019独角兽企业重金招聘Python工程师标准>>>
Spring(07)——单例注入多例之lookup-method 博客分类: spring
7 单例注入多例之lookup-method
Spring
有一种机制,可以动态的实现或重写bean
容器中指定bean
的指定方法,然后将返回值指定为bean
容器中的另一个bean
。现针对前文提到的单例bean
需注入多例bean
的应用场景来谈谈如何使用这种机制。先假设我们有一个单例beanA
需注入一个多例BeanB
类型的bean
,那么我们可以这样来做。
1、在beanA
对应的类中定义一个方法用来获取BeanB
,有这么一个方法就行,可以是空实现,到时候将由Spring
来为我们重写或实现,然后返回一个BeanB
类型的bean
。为此,可以将我们的BeanA
如下定义:
public class BeanA {/**
* 需要使用到BeanB的方法
*/public void doSomething() {BeanB beanB = this.getBeanB();System.out.println(beanB);//...}/**
* 定义一个返回值为BeanB的方法,用来获取BeanB类型的bean,该方法将由Spring来重写。
* @return
*/public BeanB getBeanB() {return null;}}
2、在ApplicationContext
中定义一个单例beanA
和一个多例beanB
,同时通过lookup-method
元素指定beanA
的getBeanB
方法将会被Spring
重写并返回bean
容器中的beanB
。
<bean id="beanB" class="com.app.BeanB" scope="prototype"/><bean id="beanA" class="com.app.BeanA"><!-- 表示将由Spring重写getBeanB()方法,并返回名为beanB的bean --><lookup-method name="getBeanB" bean="beanB"/></bean>
经过以上两步以后每次在调度beanA
的getBeanB()
方法时,Spring
都重新从bean
容器中获取一个beanB
,因为beanB
定义为多例形式,所以每次都会获取一个全新的BeanB
对象。
在给一个bean
指定了lookup-method
后,Spring
将通过CGLIB
动态的生成一个该bean
对应类型的子类,然后在该子类中实现或重写lookup-method
元素指定的方法,并从bean
容器中获取lookup-method
元素指定的bean
作为返回值进行返回。当bean
指定的类型是一个抽象类且lookup-method
指定的方法是一个抽象方法时,Spring
就将实现该抽象方法,否则就是重写。定义了lookup-method
的bean
真正的类型是Spring
动态生成类的类型,但是它可以被当做bean
本身指定的类型使用,因为动态生成的类就是继承自bean
本身指定的类型的。
由于Spring
是需要动态生成类来重写或实现指定的方法的,所以我们必须确保由lookup-method
指定的方法是可以被重写的,这就要求该方法对子类是可访问的,而且不能是final
型的。具体来讲lookup-method
元素指定的方法需要具有如下形式:
<public|protected> [abstract] <return-type> methodName(no-arguments)
如你所见,lookup-method
指定的方法还不能有参数。
(注:本文是基于Spring4.1.0所写)
http://elim.iteye.com/blog/2383967
转载于:https://my.oschina.net/xiaominmin/blog/1599759
Spring(07)——单例注入多例之lookup-method相关推荐
- Spring中bean的单例与多例
Spring中bean的单例与多例 前言 Spring中单例与多例 如何配置单例/多例 单例/多例Bean的使用事项 总结 前言 之前其实已经学习过对于单例模式的使用单例模式讲解,也用过一段时间的Sp ...
- 设计模式C#描述——单例与多例模式
设计模式C#描述--单例与多例模式 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例.这个类称为单例类. 单例模式有以下特点: 单例类只能有一个实例. 单例 ...
- 设计模式C#描述之——简单工厂模式、抽象工厂模式、单例与多例模式
设计模式C#描述之--简单工厂模式 前 言:设计模式是软件开发领域的精髓之一.学好设计模式是目前每一个开发人员的必修课.目前关于设计模式的书很多,其中比较好的有GOF那本的中译本,但并 不很适合初学者 ...
- SpringMVC Controller单例和多例
对于SpringMVC Controller单例和多例,下面举了个例子说明下. 第一次:类是多例,一个普通属性和一个静态属性. 结果:普通属性:0.............静态属性:0 普通属性:0. ...
- Java面向对象(接口、匿名内部类、object类、单例、多例)
1.1接口(抽象类与接口,优先使用接口) 抽象方法和全局常量的集合,使用interface定义,使用implements继承 接口可以多继承(可以向上强制转换) 接口只能有public,一般不写常量 ...
- 这篇文章,我们来谈一谈Spring中的属性注入
本系列文章: 读源码,我们可以从第一行读起 你知道Spring是怎么解析配置类的吗? 配置类为什么要添加@Configuration注解? 谈谈Spring中的对象跟Bean,你知道Spring怎么创 ...
- Spring中bean的注入方式
平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new一个依赖类的实例再调用该实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想,即依赖 ...
- Spring 3.0 注解注入详解
Spring 3.0 注解注入详解 2011-04-15 09:44 17ZOUGUO ITEYE博客 我要评论(1) 字号:T | T AD: 一.各种注解方式 1.@Autowired注解(不推荐 ...
- java 从一个容器获取对象,Java 如何实现从spring容器中获取注入的bean对象
Java 如何实现从spring容器中获取注入的bean对象 发布时间:2020-11-03 15:27:37 来源:亿速云 阅读:70 作者:Leah 这期内容当中小编将会给大家带来有关Java 如 ...
最新文章
- 《强化学习周刊》第21期:EMNLP 2020-2021强化学习的最新研究与应用
- 程序员该知道的7个必经阶段
- JS简单正则得到字符串中特定的值
- LeetCode(合集)删除数组中的元素(26,80,283)
- nll_loss 和 cross_entropy
- 7-207 排序 (25 分)
- 使用嵌套循环,打印 5 行 5 列的直角三角形
- APP自动化测试系列之获取Android的Activity 和 Package
- windows下eclipse模拟运行apk
- 【Java学习笔记之十一】Java中常用的8大排序算法详解总结
- 逆向工具IDA安装教程
- [算法笔记]NPC问题证明sample
- python--step-01
- html打砖块游戏制作,JavaScript实现打砖块游戏
- 自适应页界面HTML源码
- C# 开发的网络数据包抓取的的实现
- DevCloud注册和登录
- 《十周成为数据分析师》笔记——业务线 第五节 用户画像体系
- 2017下半年掘金日报优质文章合集:Android篇,android开发工程师
- 20194711 阚宇航 第一次软工作业
热门文章
- 超越谷歌MobileNet!华为提出端侧神经网络架构GhostNet|已开源
- SAP 如何看某个TR是否传入了Q或者P系统?
- 深度丨谈谈人工智能的潜力、实践意义和目前存在的障碍
- python库tqdm是什么以及怎么用tqdm、trange和tqdm.notebook
- (节点分类)四大图数据集AIFB,MUTAG,BGS,AM数据集获取
- VR视觉健康标准在穗发布 专家:VR使用不要超过45分钟
- 发布|CES 2019 科技趋势(附40页PPT)
- 脑机交互研究及标准化实践
- 专家:智能芯片国际竞争愈发激烈,应尽快制定国家标准
- 4名矿工控制50%算力 去中心化是不是谎言?