bean的实例化方法

来源:互联网 发布:js清除history 编辑:程序博客网 时间:2024/06/04 17:44

1.默认方式


2.静态工厂的方法

静态工厂方法执行流程:

  1,找到对应的配置文件;

  2,加载配置文件;

  3,解析所有的bean元素;识别id和class属性;

 4,如果bean元素只有factory-method属性,得到factory-method属性值;

  5,使用class属性+factory-method使用反射创建对象实例:

   Class.forName(class).getMethod(factory-method).invoke(null,null);

  5,把id作为key,把实例作为value存到spring容器中;

  6,getBean从容器中拿到创建好的对象的实例;


1)工厂方法


2)配置文件


注:通过静态工厂方法生成的bean,在配置文件中配置的时候,bean的类型一定要写工厂类,并且指定<bean>元素的factory-method属性,内容为要调用的工厂类中的方法

3.实体工厂方法


1)实体工厂


2)配置


注:配置实体工厂方法生成的bean首先要先配置一个工厂的实体对象,然后再配置我们需要的bean,其中设置factory-method和factory-bean属性,其中factory-bean的值设置了作为工厂的实体,factory-method设置了调用工厂的方法


4.继承Spring的FactoryBean接口

如果我们写的工厂类实现了FactoryBean接口,那么Spring就会自动的识别到我们这个类是一个工厂类,虽然我们在Spring配置文件中只配置的是工厂的类型,但是Spring知道,我们要的是这个工厂生产出来的对象

FactoryBean的执行流程:

  1,找到对应的配置文件;

  2,加载配置文件;

  3,解析所有的bean元素;识别id和class属性;

  4,通过反射得到对象的实例,Class.forName(class).newInstance();

  5,if(bean instanceof FactoryBean){

        FactoryBean factory=(FactoryBean)bean;

        Object realBean=factory.getObject();

    }

  6,把id作为key,把实例(realBean)作为value存到spring容器中;

  7,getBean从容器中拿到创建好的对象的实例;



1)配置文件


2)工厂类


3)测试类


4)测试结果




注意:这种写法需要实现spring的接口FactoryBean,并且要实现接口中的三个方法getObject()(创建bean),getObjectType()(返回创建出来的bean对象的类型),isSingleton()








0 0