Spring——Bean的命名及實例化


一、Bean的命名

前一篇講到IoC是一個管理Bean的容器,Bean多數情況下都是通過XML文件進行配置的,其中Bean的命名有以下幾種方式,現在梳理一下。

1. 不指定id,只配置類名

<bean class="com.erving.HelloImpl"></bean>

若要調用該Bean,需要用以下語句:

HelloApi helloApi = context.getBean(HelloApi.class);

2. 指定id,且id必須在IoC容器中唯一

<bean id="hello" class="com.erving.HelloImpl"></bean>

若要調用,則需要用以下語句:

HelloApi helloApi = context.getBean("hello", HelloApi.class);

3. 指定name,且name必須在IoC容器中唯一

<bean name="hello" class="com.erving.HelloImpl"></bean>

若要調用,則需要用以下語句:

HelloApi helloApi = context.getBean("hello", HelloApi.class);

4. 同時指定了id和name,則id作為標識符,name作為別名,這兩者在容器中都唯一。

<bean id="hello" name="alias" class="com.erving.HelloImpl"></bean>

這時Bean即可通過id實例化,也可通過name實例化:

HelloApi helloApi1 = context.getBean("hello", HelloApi.class);
HelloApi helloApi2 = context.getBean("alias", HelloApi.class);

5. 當一個Bean有多個name時,第一個為標識符,其他的為別名。多個name之間可通過分號、頓號或空格隔開。

6. 此外,還可以通過<alias>標簽指定別名。

<bean name="hello" class="com.erving.HelloImpl"></bean>
<alias name="hello" alias="alias"/>

這與以下語句的效果完全一致

<bean name="hello;alias" class="com.erving.HelloImpl"></bean>

 

二、Bean的實例化

Bean的實例化有三種形式,分別為構造器、靜態工廠和實例工廠。

1. 構造器。

通常情況,通過反射調用指定類的構造器來創建bean。此時bean的類型不一定為JavaBean,任何Java類都可以。構造器又分為無參數構造器和有參數構造器。

以上介紹的都是無參數構造器,配置如下:

<bean id="hello" class="com.erving.HelloImpl"></bean>

有參數的構造器,配置如下:

<bean name="hello" class="com.erving.HelloImpl2">
     <constructor-arg index="0" value="erving..."></constructor-arg>
</bean>

2. 靜態工廠。

首先定義靜態工廠類:

public class HelloApiStaticFactory {
    
    public static HelloApi newInstance(String message) {
        return new HelloImpl2(message);
    }
}

然后編輯配置文件:

<bean id="bean2" class="com.erving.HelloApiStaticFactory" factory-method="newInstance">
      <constructor-arg index="0" value="tian..."></constructor-arg>
</bean>

其中的class屬性為靜態工廠類,另外需要指明實例化bean的方法。

具體實例化與第一種方法完全一致:

public void testStaticFactory() {
    ApplicationContext context = new ClassPathXmlApplicationContext("helloworld.xml");
    HelloApi helloApi = context.getBean("bean2", HelloApi.class);
    helloApi.sayHello();
}

3. 實例工廠。

首先定義實例工廠類:

public class HelloApiInstanceFactory {
    
    public HelloApi newInstance(String message) {
        return new HelloImpl2(message);
    }
}

然后修改配置文件,配置文件分為兩部分:一是實例工廠的bean,二是通過工廠bean創建bean。

<!-- 1、定義實例工廠Bean -->  
<bean id="beanInstanceFactory" class="com.erving.HelloApiInstanceFactory"/>  
<!-- 2、使用實例工廠Bean創建Bean -->  
<bean id="bean4" factory-bean="beanInstanceFactory" factory-method="newInstance">  
    <constructor-arg index="0" value="Hello Spring!"></constructor-arg>  
</bean>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM