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了



完毕!
posted @ 2017-02-08 17:18  剑握在手  阅读(1018)  评论(0编辑  收藏  举报
返回顶部↑