天天看点

博客——Spring创建bean的三种方式

实例化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.应用场景对比

  1. 这种是开发中用的最多的。
  2. 在实际开发的过程中,很多时候我们需要使用到第三方jar包提供给我们的类,而这个类没有构造方法,而是通过第三方包提供的静态工厂创建的,这是时候,如果我们想把第三方jar里面的这个类交由spring来管理的话,就可以使用Spring提供的静态工厂创建实例的配置。
  3. 在实际开发的过程中,如Spring整合Hibernate就是通过这种方式实现的。但对于没有与Spring整合过的工厂类,我们一般都是自己用代码来管理的。