Spring framework Day06:依赖注入示例

前言

属性值注入是Spring框架的核心功能之一,它可以帮助我们将依赖的对象或配置信息注入到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、新建一个 User 类
@Data
public class User {

    private String name;
    private Integer age;
    private Set<String> tels;
    private List<String> address;
    private Map<String, String> card;

}

上述代码是一个Java类 User,其中使用了Lombok库的 @Data 注解,它自动生成了一些通用的方法,如toString()、equals()、hashCode()等。这样可以简化代码,避免手动编写这些重复且繁琐的方法。

在 User 类中,定义了以下属性:

  • name:表示用户的姓名,类型为 String。
  • age:表示用户的年龄,类型为 Integer。
  • tels:表示用户的电话号码集合,类型为 Set<String>。
  • address:表示用户的地址列表,类型为 List<String>。
  • card:表示用户的身份证信息,类型为 Map<String, String>,使用键值对来存储身份证号码和对应的姓名。

通过使用Lombok的 @Data 注解,我们无需再手动编写属性的Getter和Setter方法,它们会被自动生成。此外,还会生成其他常用方法,如equals()、hashCode()、toString()等,以及一个全参的构造函数。使用Lombok可以大大简化代码,并提高开发效率。

需要注意的是,使用Lombok时,我们需要在IDE中安装并启用Lombok插件,以便正确识别和处理注解。

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">

    <!-- 装配 User -->
    <bean id="user" class="edu.nf.ch06.User">
        <!-- 值类型的注入 -->
        <property name="name" value="user1"/>
        <property name="age" value="18"/>
        <!-- 注入 list 集合 -->
        <property name="address">
            <list>
                <value>广州</value>
                <value>珠海</value>
            </list>
        </property>

        <!-- 注入 set 集合 -->
        <property name="tels">
            <set>
                <value>12323451233</value>
                <value>13289091999</value>
            </set>
        </property>

        <!-- 注入 map 集合 -->
        <property name="card">
            <map>
                <entry key="工行" value="2223232322424241241"/>
                <entry key="商行" value="2223232322424241241"/>
            </map>
        </property>

    </bean>


</beans>

这段代码是一个Spring的配置文件,在该配置文件中定义了一个名为 "user" 的Bean,并设置了它的各个属性。

解析该配置文件的结构如下:

  • <?xml version="1.0" encoding="UTF-8"?>:XML声明,指定XML的版本和编码方式。
  • <beans>:根元素,表示一个Spring配置文件。
  • xmlns="http://www.springframework.org/schema/beans" 和 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance":定义了XML命名空间,用于引入Spring的XML schema。
  • xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd":指定XML schema的位置,这里引用的是Spring beans的schema。
  • <bean id="user" class="edu.nf.ch06.User">:定义了一个名为 "user" 的Bean,其类为 "edu.nf.ch06.User"。
  • <property name="name" value="user1"/>:为 "user" Bean 的属性 "name" 设置值为 "user1"。
  • <property name="age" value="18"/>:为 "user" Bean 的属性 "age" 设置值为 18。
  • <property name="address">...</property>:为 "user" Bean 的属性 "address" 设置一个包含两个值的列表。
  • <property name="tels">...</property>:为 "user" Bean 的属性 "tels" 设置一个包含两个值的集合。
  • <property name="card">...</property>:为 "user" Bean 的属性 "card" 设置一个包含两个键值对的映射。
  • </bean>:结束 "user" Bean 的定义。
  • </beans>:配置文件的结束。

通过这样的配置文件,我们可以将属性值注入到Bean中,完成对象的创建和初始化。在Spring应用程序中,通常会使用一个容器(如ApplicationContext)来读取和解析这样的配置文件,并管理Bean的生命周期和依赖关系。

 5、测试

@Slf4j
public class Main {

    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        User user = context.getBean(User.class);
        log.info("姓名:" + user.getName());
        log.info("年龄:" + user.getAge());
        user.getAddress().forEach(log::info);
        user.getTels().forEach(log::info);
        user.getCard().forEach((k, v) -> log.info(k + ":" + v));

    }

}

测试结果

 二、属性值注入的好处

属性值注入具有如下好处:

  1. 解耦合:通过属性值注入,我们可以将需要注入的对象或配置信息与依赖它们的Bean进行解耦。这样,在修改被注入的对象或配置时,不需要修改依赖它们的Bean,只需修改注入配置即可。这种解耦合的设计使得系统更加灵活和可维护。

  2. 可配置性:属性值注入使得配置更加灵活和可配置化。我们可以通过外部配置文件(如XML、YAML、属性文件等)来定义需要注入的属性值,而不需要修改Java代码。这样,在不同环境下,我们只需修改配置文件中的属性值,而无需重新编译和部署代码。

  3. 便于测试:属性值注入使得测试变得更加容易。我们可以在测试环境中使用不同的属性值进行注入,以验证系统在不同情况下的行为。同时,我们也可以通过注入Mock对象来模拟复杂的依赖关系,从而更方便地进行单元测试和集成测试。

  4. 可扩展性:属性值注入使得系统更易于扩展。当需要添加新的依赖对象时,我们只需在配置文件中添加对应的属性注入配置即可,而不需要修改原有的代码。这种松耦合的设计使得系统更加可维护和可扩展。

总之,属性值注入通过解耦合、可配置性、便于测试和可扩展性等方面的优势,使得系统更加灵活、可维护且易于测试。它是构建松耦合、可配置和可扩展的应用程序的重要方式之一。

三、gitee 案例

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值