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。