Spring bean id & name
来源:原创 发布时间:2015-05-18 归档:spring
环境 :
JDK 7
Spring 4.1.5
Maven 3
Junit 4.11
Eclipse Luna
id
定义 bean 的唯一标识。在上下文环境中必须要确保其唯一性。
[...] <bean id="userDaoImpl" class="org.lychie.dao.impl.UserDaoImpl" /> [...]
可以通过 getBean(String) 根据配置的 id 标识符来获取 Bean
[...] UserDao userDao = (UserDao) applicationContext.getBean("userDaoImpl"); [...]
当然也可以通过 getBean(Class) 根据类型来获取 Bean
[...] UserDao userDao = applicationContext.getBean(UserDao.class); [...]name
定义 bean 的别名, 可以定义多个, 多个之间用分隔符 逗号(",") 或 分号(";") 或 空格(" ") 隔开。同时必须确保每一个别名在上下文环境中都是唯一的。
[...] <bean name="userDaoImpl,userDao" class="org.lychie.dao.impl.UserDaoImpl" /> [...]
可以通过 getBean(String) 根据配置的别名来获取 Bean
@ContextConfiguration("/beans.xml") public class UserDaoImplTest extends AbstractJUnit4SpringContextTests { @Test public void doTest() { UserDao userDao1 = (UserDao) applicationContext.getBean("userDao"); UserDao userDao2 = (UserDao) applicationContext.getBean("userDaoImpl"); assertThat(userDao1, is(notNullValue())); assertThat(userDao2, is(notNullValue())); // true System.out.println(userDao1 == userDao2); } }id 与 name 的区别
在当前的版本(4.*), id 与 name 几乎是等效的。它们最大的区别在于, id 只能定义一个标识符, 而 name 可以同时定义 bean 的多个标识符, 在上下文环境中, 它们都要求是唯一的。我们通常用 id 为 bean 定义一个唯一的标识符, 如果 bean 需要一个以上的标识符, 可以使用 name 来定义额外的别名, 同时, id 和 name 是可以共存的, id 和 name 都可以用来查找得到 bean。