Spring Bean 的六种命名方式

一般情况下,配置Bean时需要为其指定id属性或者name属性作为bean的唯一名称。id在loC容器中必须是唯一的,并且id的命名需要满足xml的规范。

每个Bean可以有一个或者多个id,第一个称为“标识符”,其他的叫做“别名”,并且这些id在loC容器中必须是唯一的。

首先创建一个HelloWorld接口

1
2
3
4
5
package me.ipz.spring.chapter01.definition;

public interface HelloWorld {
public void sayHello(String str);
}

然后创建一个实例类,HelloWorldImpl

1
2
3
4
5
6
7
8
9
10
11
package me.ipz.spring.chapter01.definition;

public class HelloWorldImpl implements HelloWorld {

@Override
public void sayHello(String string) {
// TODO Auto-generated method stub
System.out.println("Hello World!"+string);
}

}

再创建一个xml文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />

<bean id="helloWorldById" class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />

<bean name="HelloWorldByName" class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />

<bean id="HelloWorldById01" name="HelloWorldByName01"
class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />

<bean name="bean1;alias01;alias02;alias03" class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />

<bean id="bean2" name="alias11;alias12;alias13" class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />

<bean name="bean3" class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />
<alias name="bean3" alias="alias21" />
<alias name="bean3" alias="alias22" />

</beans>

最后创建一个主方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
package me.ipz.spring.chapter01.definition;

import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Main {

public static void main(String[] args) {
// TODO Auto-generated method stub
sayHelloWorldById();
sayHelloWorldByClass();
sayHelloWorldByname();
sayHelloWorldByAlias();
}

public static void sayHelloWorldByClass() {
// 配置全限定类名,唯一
// <bean class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />
BeanFactory beanFactory = new ClassPathXmlApplicationContext("conf-definition.xml");
HelloWorld helloWorld = beanFactory.getBean(HelloWorldImpl.class);
helloWorld.sayHello("配置全限定类名,唯一");
}

public static void sayHelloWorldById() {
// <bean id="helloWorldById" class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />
BeanFactory beanFactory = new ClassPathXmlApplicationContext("conf-definition.xml");
HelloWorld helloWorld = beanFactory.getBean("helloWorldById", HelloWorldImpl.class);
helloWorld.sayHello("指定ID,唯一");
}

public static void sayHelloWorldByname() {
// <bean name="HelloWorldByName" class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />
BeanFactory beanFactory = new ClassPathXmlApplicationContext("conf-definition.xml");
HelloWorld helloWorld = beanFactory.getBean("HelloWorldByName", HelloWorldImpl.class);
helloWorld.sayHello("指定name,name为标识符,唯一");
}

public static void sayHelloWorldByNameAndId() {
/*<bean id="HelloWorldById01" name="HelloWorldByName01"
class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />*/
BeanFactory beanFactory = new ClassPathXmlApplicationContext("conf-definition.xml");
HelloWorld helloWorld01 = beanFactory.getBean("HelloWorldById01", HelloWorldImpl.class);
HelloWorld helloWorld02 = beanFactory.getBean("HelloWorldByName01", HelloWorldImpl.class);
helloWorld01.sayHello("指定id和name,其中id为标识符,name为别名,唯一");
}

public static void sayHelloWorldMutilName() {
// <bean name="bean1;alias01;alias02;alias03" class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />
BeanFactory beanFactory = new ClassPathXmlApplicationContext("conf-definition.xml");
HelloWorld helloWorld1 = beanFactory.getBean("bean1",HelloWorldImpl.class);
HelloWorld helloWorld01 = beanFactory.getBean("alias01",HelloWorldImpl.class);
HelloWorld helloWorld02 = beanFactory.getBean("alias02",HelloWorldImpl.class);
HelloWorld helloWorld03 = beanFactory.getBean("alias03",HelloWorldImpl.class);
helloWorld1.sayHello("指定多个name,用分号分隔。第一个name为标识符,其他的为别名,唯一。");
helloWorld01.sayHello("指定多个name,用分号分隔。第一个name为标识符,其他的为别名,唯一");
helloWorld02.sayHello("指定多个name,用分号分隔。第一个name为标识符,其他的为别名,唯一。");
helloWorld03.sayHello("指定多个name,用分号分隔。第一个name为标识符,其他的为别名,唯一。");
// <bean id="bean2" name="alias11;alias12;alias13" class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />
HelloWorld helloWorld2 = beanFactory.getBean("bean2", HelloWorldImpl.class);
HelloWorld helloWorld11 = beanFactory.getBean("alias11", HelloWorldImpl.class);
HelloWorld helloWorld12 = beanFactory.getBean("alias12", HelloWorldImpl.class);
HelloWorld helloWorld13 = beanFactory.getBean("alias13", HelloWorldImpl.class);
helloWorld2.sayHello("指定多个name,用分号分隔。第一个name为标识符,其他的为别名,唯一。");
helloWorld11.sayHello("指定多个name,用分号分隔。第一个name为标识符,其他的为别名,唯一");
helloWorld12.sayHello("指定多个name,用分号分隔。第一个name为标识符,其他的为别名,唯一。");
helloWorld13.sayHello("指定多个name,用分号分隔。第一个name为标识符,其他的为别名,唯一。");
}

public static void sayHelloWorldByAlias() {
/*<bean name="bean3" class="me.ipz.spring.chapter01.definition.HelloWorldImpl" />
<alias name="bean3" alias="alias21" />
<alias name="bean3" alias="alias22" />*/
BeanFactory beanFactory = new ClassPathXmlApplicationContext("conf-definition.xml");
HelloWorld helloWorld01 = beanFactory.getBean("bean3", HelloWorldImpl.class);
HelloWorld helloWorld02 = beanFactory.getBean("alias21", HelloWorldImpl.class);
HelloWorld helloWorld03 = beanFactory.getBean("alias22", HelloWorldImpl.class);
helloWorld01.sayHello("指定别名,使用alias标签来进行指定,唯一");
helloWorld02.sayHello("指定别名,使用alias标签来进行指定,唯一");
helloWorld03.sayHello("指定别名,使用alias标签来进行指定,唯一");
// 利用别名命名时得先有一个唯一的名称(id和name都可以)
// 以上就是bean的六种方式
}

}

以上每一个方法对应一种bean的命名方式,我都写上注释了。但也记得遵循XML的命名规范,由字母、字数、下划线组成,最好使用驼峰式命名法。

广而告之,不为钱财,只是好看。


0%