1. 程式人生 > >三種例項化bean方式——Spring對bean的管理(一)

三種例項化bean方式——Spring對bean的管理(一)

三種例項化bean方式——Spring對bean的管理(一)

Spring容器提供了三種對bean的例項化方式:
1)構造器例項化
2)靜態工廠方法例項化
3)例項工廠方法是例項化


構造方法例項化

先建一個Demo實體類

public class Demo {
	private String name;
	//getter和setter方法略
}

在配置檔案中使用構造方法例項化

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 構造器例項化 --> <bean id="demo1" class="com.oak.junit.day01.Demo"></bean> </beans>

測試:

	@Test
public void testCtx() { //例項化Spring容器 ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml"); //取出demo1 Demo demo1=ctx.getBean("demo1",Demo.class); System.out.println(demo1); }

靜態工廠方法例項化

新建一個工廠類-DemoBeanFactory.java,新增靜態工廠方法

public class
DemoBeanFactory { //靜態工廠方法-返回一個Demo例項 public static Demo staticDemoBean(){ return new Demo(); } }

在xml中新增靜態工廠方法例項化Demo物件

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
	<!-- 構造器例項化 -->
	<bean id="demo1" class="com.oak.junit.day01.Demo"></bean>
	
	<!-- 靜態工廠例項化 class為工廠類 factory-method為靜態工廠方法  -->
	<bean id="demo2" class="com.oak.junit.day01.DemoBeanFactory" 
	factory-method="staticDemoBean"></bean>
</beans>

測試:

	@Test
	public void testCtx() {
		//例項化Spring容器
        ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml"); 
        //取出demo1
        Demo demo1=ctx.getBean("demo1",Demo.class);
        System.out.println(demo1);
        
        //取出demo2
        Demo demo2=ctx.getBean("demo2",Demo.class);
        System.out.println(demo2);
	}

例項工廠方法例項化

在工廠類中加入例項工廠方法

public class DemoBeanFactory {
	//靜態工廠方法-返回一個Demo例項
	public static Demo staticDemoBean(){
		return new Demo();
	}
	//例項工廠方法-返回一個Demo例項
	public Demo constructorDemoBean(){
		return new Demo();
	}
}

在xml中新增例項工廠方法例項化

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
	<!-- 構造器例項化 -->
	<bean id="demo1" class="com.oak.junit.day01.Demo"></bean>
	
	<!-- 靜態工廠例項化 class為工廠類 factory-method為靜態工廠方法  -->
	<bean id="demo2" class="com.oak.junit.day01.DemoBeanFactory" 
	factory-method="staticDemoBean"></bean>
	
	<!-- 先例項化工廠類 -->
	<bean id="demoBeanFactory" class="com.oak.junit.day01.DemoBeanFactory"></bean>
	<!-- 例項工廠例項化 class為工廠類 factory-bean指定工廠類  factory-method為例項工廠方法  -->
	<bean id="demo3" factory-bean="demoBeanFactory" 
	factory-method="constructorDemoBean"></bean>
</beans>

測試:

@Test
		public void testCtx() {
			//例項化Spring容器
	        ApplicationContext ctx = new ClassPathXmlApplicationContext("spring.xml"); 
	        //取出demo1
	        Demo demo1=ctx.getBean("demo1",Demo.class);
	        System.out.println(demo1);
	        
	        //取出demo2
	        Demo demo2=ctx.getBean("demo2",Demo.class);
	        System.out.println(demo2);
	        
	        //取出demo2
	        Demo demo3=ctx.getBean("demo3",Demo.class);
	        System.out.println(demo3);
		}

此三種方式最常用的是使用類構造器例項化bean