Spring中基於XML例項化Bean的四種方式
阿新 • • 發佈:2021-01-06
Spring中基於XML例項化Bean的四種方式
1.無引數構造器(預設構造器) (最常用)
spring在建立bean的時候自動呼叫無參構造器來例項化,相當於new Bean1()
Bean1.java
public class Bean1 {
//預設無參構造
}
applicationContext.xml
<!-- 1.預設構造器例項化物件 -->
<bean id="bean1" class="com.alilaoye.demo02_instantiate_bean.way1.Bean1"/>
Bean1Test.java
public class Bean1Test {
@Test
public void test() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Bean1 bean1 = (Bean1)applicationContext. getBean("bean1");
System.out.println(bean1);
}
}
2.靜態工廠方法
Bean2.java
public class Bean2 {
//預設無參構造
}
Bean2Factory.java
public class Bean2Factory {
public static Bean2 getBean2() {
//在做例項化的時候,可以做其他的事情,即可以在這裡寫初始化其他物件的程式碼
//...
return new Bean2();
}
}
applicationContext.xml
<!-- 1.預設構造器例項化物件 -->
<!-- 2.靜態工廠獲取例項化物件 -->
<!-- class:直接指定到靜態工廠類, factory-method: 指定生產例項的方法, spring容器在例項化工廠類的時候會自動呼叫該方法並返回例項物件 -->
<bean id="bean2" class="com.alilaoye.demo02_instantiate_bean.way2.Bean2Factory" factory-method="getBean2"/>
Bean2Test.java
public class Bean2Test {
@Test
public void test() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Bean2 bean2 = (Bean2)applicationContext.getBean("bean2");
System.out.println(bean2);
}
}
3.例項工廠方法
Bean3.java
public class Bean3 {
//預設無參構造
}
Bean3Factory.java
public class Bean3Factory {
public Bean3 getBean3() {
return new Bean3();
}
}
applicationContext.xml
<!-- 3:例項工廠的方式例項化bean -->
<bean id="bean3Factory" class="com.alilaoye.demo02_instantiate_bean.way3.Bean3Factory"/>
<!-- factory-bean相當於ref:引用一個bean物件 -->
<bean id="bean3" factory-bean="bean3Factory" factory-method="getBean3"/>
Bean3Test.java
public class Bean3Test {
@Test
public void test() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Bean3 bean3 = (Bean3)applicationContext.getBean("bean3");
System.out.println(bean3);
}
}
4.FactoryBean方式
Bean4.java
public class Bean4 {
//預設無參構造
}
Bean4Factory.java
spring在例項化物件的時候回判斷是否該物件實現了FactoryBean介面,如果實現了就直接呼叫
public class Bean4Factory implements FactoryBean<Bean4> {
//產生物件
@Override
public Bean4 getObject() throws Exception {
return new Bean4();
}
@Override
public Class<?> getObjectType() {
return null;
}
}
applicationContext.xml
<!-- 4:FactoryBean-->
<!--spring在例項化物件的時候會判斷是否該物件實現了FactoryBean介面,如果實現了就直接呼叫getObject()方法,並返回執行結果-->
<bean id="bean4" class="com.alilaoye.demo02_instantiate_bean.way4.Bean4Factory"/>
Bean3Test.java
public class Bean4Test {
@Test
public void test() {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Bean4 bean4 = (Bean4)applicationContext.getBean("bean4");
System.out.println(bean4);
}
}