创建Bean的三种方式:
1、 使用类中的默认构造函数创建对象
在spring的配置文件中使用Bean标签,配以id和class属性之后,且没有其他属性和标签时,采用的就是默认构造函数创建Bean对象。故类中要提供默认构造函数。
如果没有编写任何构造方法,那么编译器会默认赠送一个构造方法,没有参数,方法体什么事都不做。一旦编写了一个构造方法(包括带参数的),那么编译器不再赠送。
构造方法也可以进行重载,即方法名称相同,参数列表不同叫方法重载。如果给构造函数加一个参数,且没有重写默认构造函数,此时表示默认构造函数没有了,对象无法创建。
则会实例化失败
此时,配置文件报错:
2、 我们在实际开发中,有可能会用到Jar包中的类,存在jar包中的类都是字节码文件,我们是没法通过修改源码的方式来提供默认构造函数。使用普通工厂中的方法创建对象,即使用类中的普通方法创建对象,并存入spring容器。
现在我们模拟一个工厂类,该工厂类为jar包中的类,类中提供了一个方法,通过这个方法我们可以得到一个AccountService,由于这个类是jar包中的类,无法通过修改源码的方式来提供默认构造函数从而无法得到AccountService对象。
即先反射创建InstanceFactory类的对象,
<bean id="instanceFactory" class="com.itheima.factory.InstanceFactory"></bean>
再通过该对象调用类中的方法来创建AccountService对象。
<bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService"></bean>
其中:factory-bean属性指定工厂Bean对象,factory-method属性指定哪个方法来获取对象。
3、 使用类中的静态方法创建对象,并存入spring容器。
用StaticFactory类模拟jar包中的类
<bean id="accountService" class="com.itheima.factory.StaticFactory" factory-method="getAccountService"></bean>