Spring基礎之例項化方式
阿新 • • 發佈:2021-01-09
技術標籤: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三種例項化方式的學習就到這裡啦,第一種的方式是最簡單的,但是呢,後面兩種方法在實際應用中也會用到,所以三種方式都需要掌握。