一、實例化Bean對象的三種方式
配置方法前先創建一個接口和接口實現類
接口
public interface UserService {
public void hello();
}
接口實現類
public class UserServiceImpl implements UserService{
public UserServiceImpl(){
System.out.println("UserServiceImpl對象被創建...");
}
public void hello() {
System.out.println("Hello IOC");
}
//初始化方法
public void init(){
System.out.println("對象創建完成,進行初始化操作!!");
}
//銷燬方法
public void destory(){
System.out.println("銷燬對象!!");
}
}
1、默認無參數構造方法(默認方式,基本上使用)
採用這種實例化方式要注意的是:要實例化的類中如果有構造器的話,一定要有一個無參的構造器。
applicationContext 配置
<bean id="us" class="cn.tx.service.UserServiceImpl" />
2、靜態工廠方法
靜態工廠方法的優點:編寫很多業務邏輯、權限校驗等。
這種方式進行實例化就要具備兩個條件:
(一)、要有工廠類及其工廠方法;
(二)、工廠方法是靜態的。
applicationContext 配置
<bean id="us" class="cn.tx.demo1.StaticFacetory" factory-method="createUs" />
靜態工廠方法代碼:
/*靜態工廠方法*/
public class StaticFacetory{
//靜態工廠方法
public static UserService createUs(){
System.out.println("通過靜態工廠方法創建UserServiceImpl對象...");
//靜態工廠方法的優點:編寫很多業務邏輯、權限校驗等。
return new UserServiceImpl();
}
}
3、動態工廠方法
使用動態工廠方法不需要是靜態的,但是在spring的配置文件中需要配置更多的內容,這裏需要配置兩個bean,第一個bean使用的構造器方法實例化工廠類,第二個bean中的id是實例化對象的名稱,factory-bean對應的被實例化的工廠類的對象名稱,也就是第一個bean的id,factory-method是非靜態工廠方法。
applicationContext 配置
<bean id="dfactory" class="cn.tx.demo1.DFactory"/>
<bean id="us" factory-bean="dfactory" factory-method="createUs"/>
動態工廠方法代碼:
/*動態工廠方法*/
public class DFactory {
public UserService createUs(){
System.out.println("動態工廠....");
return new UserServiceImpl();
}
}
測試調用,三種方式的調用方式一樣:
@Test
public void run1(){
ApplicationContext ac=new ClassPathXmlApplicationContext("applicationContext.xml");
UserService us= (UserService) ac.getBean("us");
us.hello();
}
總之,我們用得最多的是第一種,默認無參數構造方法。