Spring实例化Bean对象的三种方式

Spring实例化Bean对象的三种方式
一、Instantiation with a constructor (使用构造函数实例化)
二、Instantiation with a static factory method (使用静态工厂方法实例化)
三、Instantiation using an instance factory method (使用实例工厂方法实例化)
  • 下面通过代码来讲解三种方式的实现:
1、构造函数实例化
当您使用构造函数方法创建bean时,所有普通类都是可用的。也就是说,正在开发的类不需要实现任何特定的接口。是最常见也是最简单的一种实例化bean的方式。
需要的准备工作:
	创建一个动态web项目-->创建配置文件-->创建测试类-->创建service接口以及实现类;
	导入jar包: 4+1 beans、context、core、expression  依赖包commmons-logging;

applicationContext.xml

	
	

UserService

public class UserService implements IUserService{

	@Override
	public void show() {
		//方法自己定义,目前只需要测试能否成功拿到bean对象即可
		System.out.println("Construct Func...");
	}

}

测试类:

public class InstanceBeanTest {
	
	@Test
	public void constructBean(){
		//加载Spring的主配置文件--要导包
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		//方式一、通过id拿到配置文件中的bean对象--类型为IUserService
		IUserService userService = (IUserService) context.getBean("userService");
		//方式二、通过传入接口的反射对象从而在配置文件中获取到相同类型的对象.
		//【注意通过类型得到对象时,不能存在两个class指向路径一样的bean对象,否则会报错】
		IUserService userService2 = context.getBean(IUserService.class);
		//得到对象就可以调用其中的方法
		userService.show();
	}

}
2、静态工厂方法实例化
用于生成实例对象,所有的方法必须是static。定义使用静态工厂方法创建的bean时,使用class属性指定包含要指定的静态工厂方法和名为
factory-method的属性的类工厂方法本身的名称。
相对第一种实现方式,多了工厂类;

applicationContext.xml

	
	

StaticFactory静态工厂类

public class StaticFactory {
	//通过静态工厂的方式来实例化对象
	private static IUserService userService = new UserService();

	public static IUserService getInstance() {
		return userService;
	}

}

测试类:

	@Test
	public void staticFactoryBean(){
		//加载Spring的主配置文件--要导包
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		//方式一、通过id拿到配置文件中的bean对象--类型为IUserService
		IUserService userService = (IUserService) context.getBean("userStaticService");
		//方式二、通过传入接口的反射对象从而在配置文件中获取到相同类型的对象.
		IUserService userService2 = context.getBean(IUserService.class);
		//得到对象就可以调用其中的方法
		userService2.show();
	}
3、实例工厂方法实例化
必须先有工厂实例对象,通过实例对象创建对象。提供所有的方法都是“非静态”的。与通过静态工厂方法实例化类似,使用实例工厂方法实例化从容器中调用
现有bean的非静态方法来创建新bean。使用这个机制,保留class属性为空,在factory-bean属性中指定a的名称包含要调用的实例方法的当前(或父/父)
容器中的bean创建对象。

applicationContext.xml

	
	
	
	

实例工厂类

public class InstanceFactory {
	
	private IUserService userService = new UserService();
	
	public IUserService getInstance(){
		return userService;
	}

}

测试类

	@Test
	public void instanceFactoryBean(){
		//加载Spring的主配置文件--要导包
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
		//方式一、通过id拿到配置文件中的bean对象--类型为IUserService
		IUserService userService = (IUserService) context.getBean("userService");
		//方式二、通过传入接口的反射对象从而在配置文件中获取到相同类型的对象.
		IUserService userService2 = context.getBean(IUserService.class);
		//得到对象就可以调用其中的方法
		userService.show();
	}

你可能感兴趣的:(Spring,Spring,实例化Bean)