實例化Bean對象的三種方式

一、實例化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();
}

總之,我們用得最多的是第一種,默認無參數構造方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章