实例化Bean的三种方式
@Data //lombok
public class User {
private String username;
private String password;
}
1.使用构造方法实例化
<!-- 第一种方式: new 实现类 无参构造-->
<bean id="user1"
class="com.zxy.User">
</bean>
2.使用静态工厂方法实例化
/**
* User对象的工厂类
*/
public class UserFactory1 {
// 静态方法
public static User getUser2() {
return new User();
}
}
<!-- 第二种方式:通过静态工厂方法-->
<bean id="user2"
class="com.zxy.UserFactory1"
factory-method="getUser2">
</bean>
3.使用实例工厂方法实例化
/**
* User对象的工厂类
*/
public class UserFactory2 {
//非静态方法
public User getUser3() {
return new User();
}
}
<!--第三种方式:通过实例工厂方法 -->
<!-- 创建实例factory2 bean-->
<bean id="factory"
class="com.zxy.UserFactory2">
</bean>
<bean id="user3"
factory-bean="factory"
factory-method="getUser3">
</bean>
4.三种方式获取bean没区别
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
User user = (User) context.getBean("user1");
User user = (User) context.getBean("user2");
User user = (User) context.getBean("user3");
5.应用场景对比
- 这种是开发中用的最多的。
- 在实际开发的过程中,很多时候我们需要使用到第三方jar包提供给我们的类,而这个类没有构造方法,而是通过第三方包提供的静态工厂创建的,这是时候,如果我们想把第三方jar里面的这个类交由spring来管理的话,就可以使用Spring提供的静态工厂创建实例的配置。
- 在实际开发的过程中,如Spring整合Hibernate就是通过这种方式实现的。但对于没有与Spring整合过的工厂类,我们一般都是自己用代码来管理的。