spring bean注册之bean工厂方式
一般我们在spring中注册一个bean,直接
<bean id="websocket" class="com.sdyy.common.spring.websocket.WebsocketEndPoint"/>
这样会用WebsocketEndPoint的构造方法(这种是无参),为我们创建一个对象bean。
————————————————————————————分界线—————————————————————————————————————————————
但是还有一种方式,用bean工厂注册bean的,有三种写法,我们先看第一种:
第一种写法以及实例解析:
拿著名的Ehcahce,在spring里注册的方式来说,它在spring里是这样写的:
<bean id="realCache" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
<property name="configLocation" value="classpath:cache/ehcache.xml" />
</bean>
但是最后你会发现最后生成的名为realCache的bean是一个net.sf.ehcache.CacheManager类的对象,而非org.springframework.cache.ehcache.EhCacheManagerFactoryBean
这是因为EhCacheManagerFactoryBean实现了spring的FactoryBean接口

FactoryBean有三个方法要求实现

其中getObject方法返回的结果才会作为真正的注册结果bean返回给spring,我们来看一下
org.springframework.cache.ehcache.EhCacheManagerFactoryBean 的 getObject方法返回了什么:



是的,就是net.sf.ehcache.CacheManager。
ps:如果想要获取EhCacheManagerFactoryBean本身:
1、可以根据类型注入即直接使用@Autowired,
2、或者使用ApplicationContext的getBean(EhCacheManagerFactoryBean.class);
3、或者使用ApplicationContext的getBean("&realCache",EhCacheManagerFactoryBean.class); 这里的id就是xml里面写的id,特别注意前边的“&”
第二、三种写法:
通过工厂bean还可以写:
写法一:
<bean id="factoryBean" class="com.demo.BaseBeanFactory"></bean> <bean id="bean" factory-bean="factoryBean" factory-method="createBaseDao"></bean> 写法二:
<bean id="bean" class="com.demo.BaseBeanFactory" factory-method="createBaseDao"></bean>
factory-method指的就是哪个方法来创建bean,这里就不要求继承FactoryBean了 完毕!
spring bean注册之bean工厂方式的更多相关文章
- Bean实例化的三种方式
1. 构造器实例化 spring容器通过bean对应的默认的构造函数来实例化bean. 2. 静态工厂方式实例化 首先创建一个静态工厂类,在类中定义一个静态方法创建实例. 静态工厂类及静态方法: pu ...
- Spring工厂方式创建Bean实例
创建Bean实例的方式: 1) 通过构造器(有参或无参) 方式: <bean id="" class=""/> 2) 通过静态工厂方法 方式: &l ...
- sping练习,在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台。
相关 知识 >>> 相关 练习 >>> 实现要求: 在Eclipse搭建的Spring开发环境中,使用工厂方式创建Bean对象,将创建的Bean对象输出到控制台.要 ...
- [原创]java WEB学习笔记102:Spring学习---Spring Bean配置:bean配置方式(工厂方法(静态工厂方法 & 实例工厂方法)、FactoryBean) 全类名
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- spring概念简介、bean扫描与注册实现方式
写在前面:本文作为整理,包含很多个人理解,有跳跃成份,初学者如果看晕了,可以先看其它同类文章,或者……多看几遍. 一.概念部分: 1.spring概念:网上有很多 2.spring核心:IOC(DI) ...
- Spring Bean基本管理--bean注入方式汇总
依赖注入方式:Spring支持两种依赖注入方式,分别是属性注入和构造函数注入.还有工厂方法注入方式. 依赖注入还分为:注入依赖对象可以采用手工装配或自动装配,在实际应用开发中建议使用手工装配,因为自动 ...
- Spring Bean注册解析(一)
Spring是通过IoC容器对Bean进行管理的,而Bean的初始化主要分为两个过程:Bean的注册和Bean实例化.Bean的注册主要是指Spring通过读取配置文件获取各个bean的 ...
- 品Spring:SpringBoot发起bean定义注册的“二次攻坚战”
上一篇文章整体非常轻松,因为在容器启动前,只注册了一个bean定义,就是SpringBoot的主类. OK,今天接着从容器的启动入手,找出剩余所有的bean定义的注册过程. 具体细节肯定会颇为复杂,同 ...
- spring 手动注册bean
//将applicationContext转换为ConfigurableApplicationContext ConfigurableApplicationContext configurableAp ...
随机推荐
- javascrip异步问题
for ( var i = 1; i <= 3; i++) { setTimeout( function (){ console.log(i); }, 0); }; 一般人会以为输出结果 ...
- noip2012开车旅行 题解
题目大意: 给出n个排成一行的城市,每个城市有一个不同的海拔.定义两个城市间的距离等于他们的高度差的绝对值,且绝对值相等的时候海拔低的距离近.有两个人轮流开车,从左往右走.A每次都选最近的,B每次都选 ...
- 【动态规划】【二分】CDOJ1006 最长上升子序列
最长上升子序列. 要求输出字典序最小解. 就在更新答案的时候记录一下前驱.容易发现记录的这个玩意实际上形成了一个森林. #include<cstdio> #include<algor ...
- 【强联通分量缩点】【Tarjan】bzoj1051 [HAOI2006]受欢迎的牛
就是看是否有一些点,从其他任何点出发都可到达 定理:有向无环图中唯一出度为0的点,一定可以由任何点出发均可达. 所以缩点,若出度为零的点(强联通分量)唯一,则答案为该强联通分量中点的度数. 若不唯一, ...
- Problem I: 零起点学算法88——青年歌手大奖赛_评委会打分
#include<stdio.h> int main(void) { ],n,i; while(scanf("%d",&n)!=EOF) { n>& ...
- PatchGuard Disabled V3
https://twitter.com/Fyyre http://www.m5home.com/bbs/thread-5893-1-1.html http://pan.baidu.com/share/ ...
- 课程学习:Linux系统管理
版本 内核版本 发行版本 常见Linux发行版本 ubuntu: 易用,可靠:技术支持付费,生态稍弱 debin: 精简,稳定,可靠; 更新较慢, 无技术支持,软件过时, 企业不太用 opensuse ...
- Oracle下的ArcSDE创建的空间数据库的备份与恢复
对Oracle下ArcSDE创建的空间数据库, 整体备份.恢复或迁移. 一.imp和exp命令方式 1.1 数据库完整备份 检查数据库字符集是否一致 SQL>select userenv(‘la ...
- Java RSA加密算法生成公钥和私钥
原文:http://jingyan.baidu.com/article/6dad5075f33466a123e36ecb.html?qq-pf-to=pcqq.c2c 目前为止,RSA是应用最多的公钥 ...
- 又学到一个词REPL
A read–eval–print loop (REPL), also known as an interactive toplevel or language shell 指的是 交互式解释器.