Spring學習(十三)Spring Bean 的命名方式介紹

一般情況下,在配置一個Bean時需要爲其指定一個id屬性作爲bean的名稱。id在IoC容器中必須是唯一的,此外id的命名需要滿足xml對id的命名規範。
       在實際情況中,id命名約束並不會給我們帶來影響。但是如果用戶確實希望用到一些特殊字符來對bean進行命名,那麼可以使用bean的name屬性來進行命名,name屬性沒有字符上的限制,幾乎可以使用任何字符。
       每個Bean可以有一個或多個 id,我們把第一個 id 稱爲“標識符”,其餘id叫做“別名”,這些id在 IoC 容器中必須唯一。

首先來介紹一下Bean id 的命名規則
  1. 遵循XML命名規範
  2. 由字母,數字,下劃線組成
  3. 駝峯式,首個單詞字母小寫,從第二個單詞開始首字母大寫。
接下來我們使用具體的例子來介紹Bean的不同命名方式
1.    配置全限定類名,唯一
在示例中主要向大家輸出問候信息,我們需要一個HelloWorld接口以及一個名稱爲HelloWorldImpl的實現類。接下來我們創建一個配置文件和一個程序的入口類。

首先在項目中創建包definition,接下來在包中創建HelloWorld接口:

public interface HelloWorld {
    public void sayHello();
}
接下來我們創建HelloWorldImpl實現類:
public class HelloWorldImpl implements HelloWorld{
    public void sayHello() {
        System.out.println("Hello World");
    }
}
接下來我們在配置文件中爲HelloWorldImpl進行Bean的命名:

<bean class="cn.lovepi.chapter03.definition.HelloWorldImpl"/>

我們在程序入口Mian.java來加載配置文件以及運行示例。
public static void sayHelloWorldByClass(){
    //使用FileSystemXmlApplicationContext加載配置文件信息
    BeanFactory beanFactory=
          new FileSystemXmlApplicationContext("src/conf/conf-definition.xml");
    //獲取bean實例
    HelloWorld helloWorld=beanFactory.getBean(HelloWorldImpl.class);
    helloWorld.sayHello();
}
在Main.java文件當中我們需要:
  1. 完成配置文件的加載以及Spring IoC容器的啓動
  2. 從容器中獲得HelloWorldImpl實現類的實例
  3. 輸出問候信息
2.    指定id,唯一
在配置文件中對bean進行配置
<bean id="HelloWorldById" class="cn.lovepi.chapter03.definition.HelloWorldImpl"/>
修改Main程序入口,新建方法來調用bean

public static void sayHelloWorldById(){
    BeanFactory factory=
            new FileSystemXmlApplicationContext("src/conf/conf-definition.xml");
    HelloWorld helloWorld=factory.getBean("HelloWorldById",HelloWorldImpl.class);
    helloWorld.sayHello();
}
3.    指定name,name爲標識符,唯一
在配置文件中對bean進行配置
<bean name="HelloWorldByName" class="cn.lovepi.chapter03.definition.HelloWorldImpl"/>
修改Main程序入口,新建方法來調用bean
public static void sayHelloWorldByName(){
    BeanFactory factory=
            new FileSystemXmlApplicationContext("src/conf/conf-definition.xml");
    HelloWorld helloWorld=factory.getBean("HelloWorldByName",HelloWorldImpl.class);
    helloWorld.sayHello();
}
4.    指定id和name,其中id爲標識符,name爲別名,唯一
在配置文件中對bean進行配置
<bean id="HelloWorldById01" name="HelloWorldByName01"
      class="cn.lovepi.chapter03.definition.HelloWorldImpl"/>
修改Main程序入口,新建方法來調用bean

public static void sayHelloWorldByNameAndId(){
    BeanFactory factory=
            new FileSystemXmlApplicationContext("src/conf/conf-definition.xml");
    HelloWorld helloWorld01=factory.getBean("HelloWorldById01",HelloWorldImpl.class);
    HelloWorld helloWorld02=factory.getBean("HelloWorldByName01",HelloWorldImpl.class);
    helloWorld01.sayHello();
    helloWorld02.sayHello();
}
5.    指定多個name,其中多個name需要用分號來進行分割,第一個name爲標識符,其他的爲別名,唯一
在配置文件中對bean進行配置
<bean name="bean1;alias01;alias02;alias03"
      class="cn.lovepi.chapter03.definition.HelloWorldImpl"/>
<bean id="bean2" name="alias11;alias12;alias13"
      class="cn.lovepi.chapter03.definition.HelloWorldImpl"/>
修改Main程序入口,新建方法來調用bean
public static void sayHelloWorldByMutilName(){
    BeanFactory factory=
            new FileSystemXmlApplicationContext("src/conf/conf-definition.xml");
    HelloWorld helloWorld1=factory.getBean("bean1",HelloWorldImpl.class);
    HelloWorld helloWorld01=factory.getBean("alias01",HelloWorldImpl.class);
    HelloWorld helloWorld02=factory.getBean("alias02",HelloWorldImpl.class);
    HelloWorld helloWorld03=factory.getBean("alias03",HelloWorldImpl.class);
    helloWorld1.sayHello();
    helloWorld01.sayHello();
    helloWorld02.sayHello();
    helloWorld03.sayHello();

    HelloWorld helloWorld2=factory.getBean("bean2",HelloWorldImpl.class);
    HelloWorld helloWorld11=factory.getBean("alias11",HelloWorldImpl.class);
    HelloWorld helloWorld12=factory.getBean("alias12",HelloWorldImpl.class);
    HelloWorld helloWorld13=factory.getBean("alias13",HelloWorldImpl.class);
    helloWorld2.sayHello();
    helloWorld11.sayHello();
    helloWorld12.sayHello();
    helloWorld13.sayHello();
}
6.    指定別名,使用alias標籤來進行指定,唯一
在配置文件中對bean進行配置
<bean name="bean3" class="cn.lovepi.chapter03.definition.HelloWorldImpl"/>
<alias name="bean3" alias="alias21"/>
<alias name="bean3" alias="alias22"/>
修改Main程序入口,新建方法來調用bean
public static void sayHelloWorldByAlias(){
    BeanFactory factory=
            new FileSystemXmlApplicationContext("src/conf/conf-definition.xml");
    HelloWorld helloWorld01=factory.getBean("bean3",HelloWorldImpl.class);
    HelloWorld helloWorld02=factory.getBean("alias21",HelloWorldImpl.class);
    HelloWorld helloWorld03=factory.getBean("alias22",HelloWorldImpl.class);
    helloWorld01.sayHello();
    helloWorld02.sayHello();
    helloWorld03.sayHello();

}

利用別名命名時得先有一個唯一的名稱(id和name都可以)

以上就是命名bean的六種方式。









發佈了68 篇原創文章 · 獲贊 132 · 訪問量 27萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章