Spring Bean 的别名
Bean 别名(Alias)的价值
• 复用现有的BeanDefinition
• 更具有场景化的命名方法,比如:
代码示例
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.geekbang.thinking.in.spring.bean.definition;
import org.geekbang.thinking.in.spring.ioc.overview.domain.User;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* 34 | Spring Bean的别名:为什么命名Bean还需要别名?
* Bean 别名示例
* Bean 别名(Alias)的价值
* • 复用现有的BeanDefinition
* • 更具有场景化的命名方法,比如:
* <alias name="myApp-dataSource" alias="subsystemA-dataSource"/>
* <alias name="myApp-dataSource" alias="subsystemB-dataSource"/>
*
* @author <a href="mailto:mercyblitz@gmail.com">Mercy</a>
* @since
*/
public class BeanAliasDemo {
public static void main(String[] args) {
// 配置 XML 配置文件
// 启动 Spring 应用上下文
BeanFactory beanFactory = new ClassPathXmlApplicationContext("classpath:/META-INF/bean-definitions-context.xml");
// 通过别名 xiaomage-user 获取曾用名 user 的 bean
User user = beanFactory.getBean("user", User.class);
User xiaomageUser = beanFactory.getBean("xiaomage-user", User.class);
// 两种方式获取, 会发现两个bean是相同的
System.out.println("xiaomage-user 是否与 user Bean 相同:" + (user == xiaomageUser));
}
}
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 34 | Spring Bean的别名:为什么命名Bean还需要别名?-->
<!-- 导入第三方 Spring XML 配置文件 -->
<!-- 这里面有一个user类 id = user -->
<import resource="classpath:/META-INF/dependency-lookup-context.xml" />
<!-- 将 Spring 容器中 "user" Bean 关联/建立别名 - "xiaomage-user" -->
<alias name="user" alias="xiaomage-user" />
</beans>