使用无参构造方法实例化
在默认情况下,它会通过反射调⽤⽆参构造函数来创建对象。如果bean中没有默认无参构造函数,将会创建失败
代码语言:javascript复制<bean id="userDao" class="com.zjq.dao.impl.UserDaoImpl"/>
工厂静态方法实例化
工厂的静态方法返回Bean实例 在实际开发中,我们使⽤的对象有些时候并不是直接通过构造函数就可以创建出来的,它可能在创建的过程 中会做很多额外的操作。此时会提供⼀个创建对象的⽅法,恰好这个⽅法是static修饰的⽅法,即是此种情况。 例如,我们在做Jdbc操作时,会⽤到java.sql.Connection接⼝的实现类,如果是mysql数据库,那么⽤的就 是JDBC4Connection,但是我们不会去写JDBC4Connection connection = new JDBC4Connection() ,因为我们要注册驱动,还要提供URL和凭证信息,⽤DriverManager.getConnection ⽅法来获取连接。
代码语言:javascript复制public class StaticFactoryBean {
public static UserDao createUserDao(){
return new UserDaoImpl();
}
}
代码语言:javascript复制<bean id="userDao" class="com.zjq.factory.StaticFactoryBean"
factory-method="createUserDao" />
工厂实例方法实例化
工厂的非静态方法返回Bean实例 此种⽅式和上⾯静态⽅法创建其实类似,区别是⽤于获取对象的⽅法不再是static修饰的了,⽽是类中的⼀ 个普通⽅法。此种⽅式⽐静态⽅法创建的使⽤⼏率要⾼⼀些。 在早期开发的项⽬中,⼯⼚类中的⽅法有可能是静态的,也有可能是⾮静态⽅法,当是⾮静态⽅法时,即可采⽤下⾯的配置⽅式
代码语言:javascript复制public class DynamicFactoryBean {
public UserDao createUserDao(){
return new UserDaoImpl();
}
}
代码语言:javascript复制<bean id="factoryBean" class="com.zjq.factory.DynamicFactoryBean"/>
<bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>