Spring 三种创建Bean的方式 第一种——默认构造函数创建 第二种——使用某个类中的方法创建 第三种——使用工厂中的静态方法创建对象

Spring 三种创建Bean的方式
第一种——默认构造函数创建
第二种——使用某个类中的方法创建
第三种——使用工厂中的静态方法创建对象

  在spring配置中使用bean标签,配置好id和class后,没有其他属性和标签,采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。

Spring 三种创建Bean的方式
第一种——默认构造函数创建
第二种——使用某个类中的方法创建
第三种——使用工厂中的静态方法创建对象

  但如果类是封装在jar包里面,我们无法通过修改源码的方法提供默认构造函数,例如我们创建一个InstanceFactory类

Spring 三种创建Bean的方式
第一种——默认构造函数创建
第二种——使用某个类中的方法创建
第三种——使用工厂中的静态方法创建对象

  若我们用第一种方式配置bean标签

Spring 三种创建Bean的方式
第一种——默认构造函数创建
第二种——使用某个类中的方法创建
第三种——使用工厂中的静态方法创建对象

  我们想要的是工厂的实例,却得到了AccountServiceImpl的实例,这样逻辑错误了,所以这引出了我们第二种方法

第二种——使用某个类中的方法创建

  这两行的意思是:我们现在通过第一种方式把工厂存入我们的spring容器了

Spring 三种创建Bean的方式
第一种——默认构造函数创建
第二种——使用某个类中的方法创建
第三种——使用工厂中的静态方法创建对象

  而accountService是怎么来的呢,是通过spring容器中instanceFactory里的getAccountService方法获取的

Spring 三种创建Bean的方式
第一种——默认构造函数创建
第二种——使用某个类中的方法创建
第三种——使用工厂中的静态方法创建对象

  运行一下client,我们可以看到

Spring 三种创建Bean的方式
第一种——默认构造函数创建
第二种——使用某个类中的方法创建
第三种——使用工厂中的静态方法创建对象

第三种——使用工厂中的静态方法创建对象

  我们创建一个staticFactory,里面的方法是静态的

Spring 三种创建Bean的方式
第一种——默认构造函数创建
第二种——使用某个类中的方法创建
第三种——使用工厂中的静态方法创建对象

  若我们工厂的方法是静态的话,就写上class属性指定factory,再用factory-method指定静态方法

Spring 三种创建Bean的方式
第一种——默认构造函数创建
第二种——使用某个类中的方法创建
第三种——使用工厂中的静态方法创建对象

   run一下clent,prefect

Spring 三种创建Bean的方式
第一种——默认构造函数创建
第二种——使用某个类中的方法创建
第三种——使用工厂中的静态方法创建对象