Spring framework Day03:Bean 的 id 以及 name 属性

一、什么是 Bean 的 id 和 name 属性?

在 Spring 框架中,Bean 的 id 和 name 属性是用于标识和引用 Bean 实例的属性。它们可以用于配置和查找 Bean。

1、id 属性:id 属性是唯一标识一个 Bean 的字符串值。每个 Bean 在 Spring 容器中必须有一个唯一的 id 属性,以便进行查找和引用。

例如,在 XML 配置文件中定义一个 id 为 "orderService" 的 Bean:

    <bean id="orderService" class="edu.nf.ch03.service.OrderService" />
2、name 属性:name 属性是一个包含了一个或多个别名的字符串值。

它允许我们给 Bean 设置多个名称,以便通过这些名称来引用 Bean。名称之间可以使用逗号、分号或空格进行分隔。
例如,在 XML 配置文件中定义一个 id 为 "orderService",同时给 Bean 设置两个名称别名 "o1" 和 "02":

<bean id="orderService" name="o1 o2" class="edu.nf.ch03.service.OrderService" />

 二、使用 id 查找 Bean 对象

1、新建项目,结构如下:

2、导入 spring 依赖 
 
    <!-- spring 的核心依赖 -->
    <dependencies>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.23</version>
        </dependency>
 
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.4.5</version>
        </dependency>
 
 
    </dependencies>

 

3、新建一个 OrderService 类
@Slf4j
public class OrderService {

    public void placeOrder(){
        log.info("用户下单.....");
    }

}

 定义一个方法,简单的输出一句话即可。

4、在 resources 下新建一个 spring 的 xml 文件 beans.xml,在配置文件中完成 Bean 的装配 
<?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 id="orderService" class="edu.nf.ch03.service.OrderService" />

</beans>

这里没有指定 scope 的属性,因为它默认就是 单例(singleton)的。 

5、测试
@Slf4j
public class Main {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        OrderService bean = context.getBean("orderService", OrderService.class);
        bean.placeOrder();
    }

}

获取 bean 对象,getBean("id 属性",业务实现类的 Class)

测试结果

三、使用 name 查找 Bean 对象

1、更改 xml 文件的配置
<?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 id="orderService" name="o1 o2 o3" class="edu.nf.ch03.service.OrderService"/>

</beans>

 现在我们即指定了 id ,又指定了别名,而且是多个别名,注意:多个别名用空隔或者逗号隔开。

 2、测试
@Slf4j
public class Main {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        OrderService bean = context.getBean("o1", OrderService.class);
        bean.placeOrder();
    }

}

测试结果

 图中测试了两个别名,都是可以正常使用的。

id 属性表示 Bean 在容器中的唯一标识,是不可重复的,但同时还有另外一个 name 属性,用于指定 bean 在容器中的别名。并且这个别名时可以有多个的(别名之间可以使用逗号或者空格隔开),所以在获取 Bean 的时候,可以根据 id ,也可以根据别名来获取。
注意:id 在指定 name 以后,可以 不需要指定 id,但是 name 的第一个名字就会自动作为 id 使用,其他的仍然是别名。


无论是使用 id 属性还是 name 属性,我们都可以通过这些标识来引用和使用相应的 Bean 实例。例如,在 Java 代码中,我们可以使用 @Autowired、@Resource 等注解根据 id 或 name 属性自动装配 Bean。这些注解后面我们都会讲到。 

需要注意的是,默认情况下,id 属性和 name 属性的值是相同的。如果只配置了 id 属性而没有配置 name 属性,则 name 属性默认与 id 属性相同。但是,通过 name 属性可以给 Bean 设置多个别名,提供了更灵活的引用方式。

四、使用 id 和 name 各有什么好处?

使用 id 属性和 name 属性都有它们各自的好处。

1、id 属性的好处:

唯一标识:id 属性是用于唯一标识一个 Bean 实例,每个 Bean 在 Spring 容器中必须有一个唯一的 id。这样可以确保在引用和查找 Bean 时不会出现冲突。
易于理解和引用:通过给每个 Bean 设置一个具有描述性的 id,可以方便地理解和引用这些 Bean 实例。我们可以根据 id 直接使用或注入相应的 Bean。


2、name 属性的好处:

多重引用:name 属性允许给 Bean 设置多个别名,以便通过不同的名称引用同一个 Bean 实例。这在某些场景下非常有用,例如允许使用不同的命名约定或提供更灵活的引用方式。
代码兼容性:通过为 Bean 设置多个名称别名,我们可以保持一致的代码兼容性。假设我们在某个版本中使用了某个名称别名,然后在以后的版本中需要更改该别名,我们可以保留旧的别名并添加新的别名,以便在应用代码中无需修改而仍然能够引用 Bean。


总结:使用 id 属性可以确保每个 Bean 在 Spring 容器中具有唯一的标识,并提供直观和明确的引用方式。而使用 name 属性可以为 Bean 设置多个别名,提供更灵活和多样化的引用方式,并保持代码兼容性。根据具体的应用场景和需求,选择适合的标识方式。

五、gitee 案例

案例完整地址:https://gitee.com/qiu-feng1/spring-framework.git

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值