1. 程式人生 > 其它 >Spring基礎之例項化方式

Spring基礎之例項化方式

技術標籤:Spring學習筆記springjava

文章目錄


前言

本篇主要介紹了spring例項化的三種方式:預設構造、靜態工廠、例項工廠。


一、預設構造

這種方式其實在入門案例中已經看到了,是spring中很常見的一種例項化方式,也很簡單。在xml中配置如下:

<bean id="xxx" class="xxx.xxx" />

這樣的配置方式就是預設構造了。這裡需要注意的一點是,使用這種方式例項化一定要有預設構造,沒有預設構造的話會報錯。
(如果建立一個類不寫構造,會預設繼承父類的無參構造,這樣是不會有問題的;如果自己定義了一個有參構造但是沒有給一個無參構造,直接用這種方式會報錯。)

【這裡稍微看一下如果定義了有參,但沒有定義無參要怎麼樣做】
寫了一個簡單的UserServiceImpl的實現類,如下:

public class UserServiceImpl implements UserService {
    public UserServiceImpl(int i){
        System.out.println(i);
    }
    @Override
    public void addUser() {
        System.out.println("inject_factory add user");
    }
}

bean.xml的配置如下:

    <bean id="userServiceId" class="com.spr.inject_factory.UserServiceImpl">
        <constructor-arg value="9"></constructor-arg>
    </bean>

測試類:

    @Test
    public void func3(){
        String xmlpath = "bean.xml"
; ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlpath); UserService userService = applicationContext.getBean("userServiceId",UserService.class); userService.addUser(); }

列印的結果如下:
在這裡插入圖片描述

二、靜態工廠

靜態工廠就需要一個工廠類,並且這個工廠類中的方法是靜態的。具體程式碼如下:

public class StaticFactory {
    public static UserService create(){
        return new UserServiceImpl();
    }
}

如果,不是由spring來例項化這個service的類,那麼,就是簡單的類名.方法的形式來呼叫,建立service的物件。
那在Spring中,就需要在xml檔案中進行如下配置,交由spring完成:

<bean id="staticFactory" class="com.spr.inject_factory.StaticFactory" factory-method="create"></bean>

而測試類中,getBean要獲取的就是這個工廠類了:

    public void fun(){
        String xmlpath = "bean.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlpath);
        UserService userService = applicationContext.getBean("staticFactory",UserService.class);
        userService.addUser();
    }

三、例項工廠

例項工廠與上面類似,也需要有一個工廠類,區別就是例項工廠類中的方法不是靜態的。如果不是spring來實現的話,那麼就是要先建立一個工廠類的物件,然後通過這個物件來呼叫建立service物件的方法。
而交由spring來完成的話,xml檔案中需要如下配置:

  <bean id="factory" class="com.spr.inject_factory.Factory"></bean>
  <bean id="userService" factory-bean="factory" factory-method="create"></bean>

此時測試類中,getBean要獲取的是userService:

    public void func2(){
        String xmlpath = "bean.xml";
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlpath);
        UserService userService = applicationContext.getBean("UserService",UserService.class);
        userService.addUser();
    }

總結

spring三種例項化方式的學習就到這裡啦,第一種的方式是最簡單的,但是呢,後面兩種方法在實際應用中也會用到,所以三種方式都需要掌握。