spring配置和管理bean的方式简历概述

来源:互联网 发布:mac代表哪个国家 编辑:程序博客网 时间:2024/05/18 01:29

1.      写在前面

Spring框架对bean的管理,是通过2个容器管理的即BeanFactory和ApplicationContext。而ApplicationContext其实是BeanFactory的子接口,内容进行了扩展。即然称其为容器则说明它是管理整个框架里的bean的,负责bean的生命周期。

2.      第一种方式。也是框架里常用的方式,实现FactoryBean接口。

我觉得该类更像是对Bean的代理。Spring容器getBean(id)时见到bean的定义是普通class时,就会构造该class的实例来获得bean,而如果发现是FacotryBean接口的实例时,就通过调用它的getObject()函数来获得bean。如果要获取FactoryBean对象,可以在id前面加一个&符号来获取。作用其实是类的代理。

比如:

public class Test implements FactoryBean<SysCatRo> {@Overridepublic SysCatRo getObject() throws Exception {return new SysCatRo();}@Overridepublic Class<?> getObjectType() {return SysCatRo.class;}@Overridepublic boolean isSingleton() {return false;}}

ps: SysCatRo是个数据结构体

在getBean(id)时返回的是SysCatRo实例。

3工厂方式:

第二种:静态工厂

对象的创建由静态工厂里的静态类提供,我相信很多同学都用过。我们这里简单举个spring里配置静态工厂方式,比如有个TestStaticFacotry类里有个getTest()静态方法

/**     * 静态工厂方法      * @param name     * @return     */    public static SysCatRo getTest(String name) {        return new SysCatRo(name);     }

那么要applicationContext.xml里可如下配置:

<bean id="test1"         class="TestStaticFacotry"        factory-method="getTest">        <constructor-arg value="audi"></constructor-arg></bean>

那么在程序里可用test1创建很多bean.

 

第三种:实例工厂方法

比如有个TestFacotry类里有个getTest()方法

/**     * 工厂方法      * @param name     * @return     */    public SysCatRo getTest(String name) {        return new SysCatRo(name);     }

那么在applicationContext.xml里可如下配置:


<!-- 配置工厂的实例 需要创建工厂本身,在调用工厂的实例方法来返回bean的实例-->

   <bean id="testFacotry"class="TestFacotry"></bean>

   <!-- factory-bean:指向实例工厂方法的bean

        factory-method:指向实例工厂方法的名字

      constructor-arg:如果实例工厂方法需要传入参数,则使用constructor-arg来配置参数

     -->

    <!-- 通过实例工厂方法来配置bean -->

    <bean id="test2" factory-bean="testFacotry"factory-method="getTest">

        <constructor-arg value="ford"></constructor-arg>

    </bean>



1 0
原创粉丝点击