三種例項化bean方式——Spring對bean的管理(一)
阿新 • • 發佈:2018-11-04
三種例項化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