• 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了



    完毕!
  • 相关阅读:
    oracle中查询表是否存在
    asp.net webform/mvc导出Excel通用代码
    分享给大家一个500G.Net ftp资料库
    C# 使用TopShelf实现Windows服务部署
    C#基于Quartz.NET实现任务调度并部署Windows服务
    附加进程找不到w3wp.exe进程解决方案
    在vs2015中使用附加进程的方式调试IIS中的页面
    删除datatable的行后,出现“不能通过已删除的行访问该行的信息”的错误,即DeletedRowInaccessibleException
    C# FTP操作类
    C# vb .net实现发光效果
  • 原文地址:https://www.cnblogs.com/flying607/p/6379123.html
Copyright © 2020-2023  润新知