采用 spring 配置文件管理Bean

news2024/11/30 3:41:14

文章目录

  • 采用 spring 配置文件管理Bean
    • 一、安装配置Maven
    • 二、Spring 框架
      • 1、Spring 官网
    • 三、Spring 容器演示-采用Spring配置文件管理Bean
      • 1、创建Manev项目
      • 2、添加Spring依赖
      • 3、创建杀龙骑士类
      • 4、创建勇敢骑士类
      • 5、采用传统方式让勇敢骑士完成杀龙任务
      • 6、采用Spring 容器让勇敢骑士完成杀龙任务
        • 1) 创建日志属性文件 log4j.properties
        • 2) 创建Spring 配置文件
        • 3) 在Spring配置文件里面创建Bean
          • (1) 创建杀龙任务Bean
          • (2) 创建勇敢骑士Bean
        • 4) 创建新勇敢骑士测试类
        • 5) 创建两个勇敢骑士bean
        • 6) 修改新勇敢骑士测试类
      • 7、采用构造方法注入方式注入属性值
        • 1) 创建救美任务类
        • 2) 创建救美骑士类
        • 3) 配置救美骑士Bean
        • 4) 创建旧救美骑士测试类
        • 5) 创建新救美骑士测试类

采用 spring 配置文件管理Bean

一、安装配置Maven

下载链接:https://pan.baidu.com/s/1pL4IRhwjuXAkezgWQdrnYQ
提取码:hjzs
先创建一个 MAVEN_HOME 变量是包存放的路径
在这里插入图片描述
然后在Path 里面添加 %MAVEN_HOME%\bin
在这里插入图片描述
配置好之后,在命令行进行测试 输入: mvn -version 可以
在这里插入图片描述
安装好之后在 IDEA 里面进行配置Maven
打开setting 选择自己的maven
在这里插入图片描述

二、Spring 框架

1、Spring 官网

链接:https://spring.io/

在这里插入图片描述
最新版本是6.0.4 因为我们用的JDK版本是17 为了与之对应所以我们这里使用的Spring Franework的版本是5.3.25
在这里插入图片描述

三、Spring 容器演示-采用Spring配置文件管理Bean

1、创建Manev项目

在这里插入图片描述

2、添加Spring依赖

Spring 框架与JDK版本对应关系

Spring框架版本JDK版本
6.0.xJDK17-21(预期)
5.3.xJDK8-19(预期)
5.2.xJDK8-15
5.1.xJDK8-12
5.0.xJDK8-10
4.3.xJDK6-8

我们这篇博文的环境,JDK17,IntelliJ IDEA 2022,使用的是Spring 5.3.25

在Maven 仓库里面查找我们需要的依赖
Maven仓库地址:https://mvnrepository.com/artifact/org.springframework/spring-core/5.3.25
spring core里面选择5.3.25
在这里插入图片描述
下面是要添加的依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>net.aex.spring</groupId>
    <artifactId>SpringDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <!--Spring核心-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>5.3.25</version>
        </dependency>
        <!--Spring实体-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>5.3.25</version>
        </dependency>
        <!--Spring容器-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>5.3.25</version>
        </dependency>
        <!--Spring Web-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>5.3.25</version>
        </dependency>
        <!--Spring MVC-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>5.3.25</version>
        </dependency>
        <!--Spring测试-->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.3.25</version>
        </dependency>
        <!--单元测试-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.13.2</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

</project>

3、创建杀龙骑士类

创建 net.aex.spring.day01包,然后在包里创建 SlayDragonQuest
在这里插入图片描述

package net.aex.spring.day01;
//杀龙任务类
public class SlayDragonQuest {
    public void embaek(){
        System.out.println("执行杀龙任务.....");
    }
}

4、创建勇敢骑士类

net.aex.spring.day01包里创建BraveKnight

package net.aex.spring.day01;
//勇敢骑士类
public class BraveKnight {
    private String name; //骑士姓名
    private SlayDragonQuest slayDragonQuest; //杀龙任务

    public String getName() {  //alt + insert 快捷键 创建get和set方法
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public SlayDragonQuest getSlayDragonQuest() {
        return slayDragonQuest;
    }

    //设置杀龙任务
    public void setSlayDragonQuest(SlayDragonQuest slayDragonQuest) {
        this.slayDragonQuest = slayDragonQuest;
    }

    //勇敢骑士执行任务
    public void embarkOnQuest(){
        System.out.print("勇敢骑士[" + name + "]"); //骑士留名
        slayDragonQuest.embaek(); //执行杀龙任务
        
    }
}

回顾一下传统方式怎么使用这两个类。需要我们自己通过new实例化两个类,然后设置勇敢骑士对象的姓名和杀龙任务属性,然后调用勇敢骑士执行任务的方法。

5、采用传统方式让勇敢骑士完成杀龙任务

test/java里创建net.aex.spring.day01包,然后在包里面创建TestBraveKnightOld
在这里插入图片描述

package net.aex.spring.day01;

import org.junit.Test;

//采用传统方式测试骑士勇士类
public class TestBraveKnightOld {

    @Test
    public void testBraveKninght(){
        //创建杀龙任务对象
        SlayDragonQuest slayDragonQuest = new SlayDragonQuest();
        //创建勇敢骑士对象
        BraveKnight braveKnight = new BraveKnight();
        //设置勇敢骑士属性
        braveKnight.setName("罗宾汉"); //这个是new 了 一个我们创建的BraveKnight的对象,调用了里面的setName的属性
        braveKnight.setSlayDragonQuest(slayDragonQuest);
        //调用勇敢骑士执行对象
        braveKnight.embarkOnQuest(); //这个也是调用了那里面的方法执行
    }
}

运行测试方法 testBraveKninght() 查看结果
在这里插入图片描述

6、采用Spring 容器让勇敢骑士完成杀龙任务

1) 创建日志属性文件 log4j.properties

resources目录里创建log4j.properties
在这里插入图片描述

log4j.rootLogger=WARN, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

2) 创建Spring 配置文件

resources里创建xmlconfig目录,然后在里面创建spring-config.xml
选这个带有叶子的,注意只有IDEA 企业版才有这个
在这里插入图片描述
在这里插入图片描述

3) 在Spring配置文件里面创建Bean

(1) 创建杀龙任务Bean
 <!--配置杀龙任务Bean-->
    <bean id="slayDragonQuest" class="net.aex.spring.day01.SlayDragonQuest"/>

id属性 :对应对象名,可以任取,然后在应用程序里我们可以通过这个id值从Spring容器中获取Bean对象。
class属性 :表明Bean对象是基于哪个类来实例化,注意一定要包含包名。

(2) 创建勇敢骑士Bean

property元素:给对象设置属性值
name属性:Bean对象的属性名
ref属性:Bean对象的属性值(引用另一个Bean对象)
勇敢骑士Bean通过<property>元素将杀龙任务Bean注入作为其属性。注意,name属性值一定是BraveKnight类的属性名,ref属性值是已定义的杀龙任务Bean的id值。

<?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-->
    <bean id="slayDragonQuest" class="net.aex.spring.day01.SlayDragonQuest"/>

    <!--配置勇敢骑士Bean-->
    <bean id="braveKnight" class="net.aex.spring.day01.BraveKnight">
        <property name="name" value="罗宾汉"/>  <!-- RobinHood.setName("罗宾汉")-->
        <property name="slayDragonQuest" ref="slayDragonQuest"/>  <!--RobinHood.setSlayDragonQuest(slayDragonQuest)-->
    </bean>

</beans>

通过Spring配置文件,创建了两个Bean对象,它们之间存在依赖关系,第一个Bean对象是第二个Bean对象的任务属性值。

4) 创建新勇敢骑士测试类

test/java/net.huawei.spring.day01里创建TestBraveKnightNew测试类
在这里插入图片描述

package net.aex.spring.day01;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;


public class TestBraveKnightNew {
    private ClassPathXmlApplicationContext context; // 基于类路径XML配置文件的应用容器(Bean工厂)

    @Before // 每次测试方法执行前都要执行的代码就放在此方法里
    public void init() {
        // 基于Spring配置文件创建应用容器
        context = new ClassPathXmlApplicationContext("xmlconfig/spring-config.xml");
        // 提示用户
        System.out.println("Spring应用容器已创建~");
    }

    @Test
    public void testBraveKnight() {
        // 根据名称从应用容器中获取勇敢骑士对象
        BraveKnight braveKnight = (BraveKnight) context.getBean("braveKnight");
        // 勇敢骑士执行任务
        braveKnight.embarkOnQuest();
    }

    @After // 每次测试方法执行后都要执行的代码就放在此方法里
    public void destroy() {
        // 关闭应用容器
        context.close();
        // 提示用户
        System.out.println("Spring应用容器已关闭~");
    }

}

代码说明:首先通过Spring配置文件创建Spring应用容器,然后就可以利用容器的getBean方法通过名称获取容器里的Bean对象,然后调用该对象的方法。
运行测试方法testBraveKnight(),查看结果
在这里插入图片描述
根据名称从应用容器中获取勇敢骑士对象可能会报错,因为配置文件里没有定义那个名称的Bean
在这里插入图片描述

5) 创建两个勇敢骑士bean

基于一个类可以创建多个对象,因此,在spring-config.xml文件里,也可以基于同一个类创建多个Bean。
基于BraveKnight类再创建两个Beanid值分别为knight1knight2
在这里插入图片描述
在Spring配置文件里,同一个Bean不能重复定义,也就是说不允许两个Bean有相同的id

6) 修改新勇敢骑士测试类

获取新建的两个勇敢骑士Bean,调用执行任务方法
在这里插入图片描述
执行testBraveKnight()测试方法,查看结果
在这里插入图片描述
勇敢骑士Bean采用属性注入方式将杀龙任务Bean注入作为其属性。
在这里插入图片描述
初始化对象其实可以调用有参构造方法来设置属性的初始值,对应到Spring的Bean工厂,就还有一种注入方式,叫做构造方法注入。同样地,我们还是通过案例来演示如何通过构造方法来注入属性值。

7、采用构造方法注入方式注入属性值

1) 创建救美任务类

net.aex.spring.day01包里创建RescueDamselQuest
在这里插入图片描述

package net.aex.spring.day01;
//救美任务类
public class RescueDamselQuest {
    public void embark(){
        System.out.println("执行救美任务....");
    }
}

2) 创建救美骑士类

net.aex.spring.day01包里创建RescueDamselKnight
在这里插入图片描述

package net.aex.spring.day01;
//救美骑士类
public class RescueDamselKnight {
    private String name;
    private RescueDamselQuest rescueDamselQuest;

    /**
     * 有参构造方法
     *
     * @param name
     * @param rescueDamselQuest
     */
    public RescueDamselKnight(String name, RescueDamselQuest rescueDamselQuest) {
        this.name = name;
        this.rescueDamselQuest = rescueDamselQuest;
    }

    public void embarkOnQuest() {
        System.out.print("救美骑士[" + name + ']');
        rescueDamselQuest.embark();
    }
}

代码说明:通过构造方法来设置骑士的姓名与要执行的任务。

3) 配置救美骑士Bean

在Spring配置文件里创建救美骑士Bean
在这里插入图片描述
arg: argument 参数

<!--创建救美任务Bean-->
    <bean id="rescueDamselQuest" class="net.aex.spring.day01.RescueDamselQuest"/>
    <!--配置救美骑士Bean-->
    <bean id="Galahad" class="net.aex.spring.day01.RescueDamselKnight">
        <constructor-arg value="格拉海德"/>
        <constructor-arg ref="rescueDamselQuest"/>
    </bean>

4) 创建旧救美骑士测试类

test/java/net.huawei.spring.day01包里创建TestRescueDamselKnightOld
在这里插入图片描述

package net.aex.spring.day01;

import org.junit.Test;

public class TestRescueDamselKnightOld {
    @Test
    public void testRescueDamselKnight() {
        // 创建救美任务对象
        RescueDamselQuest rescueDamselQuest = new RescueDamselQuest();
        // 创建救美骑士对象
        RescueDamselKnight rescueDamselKnight = new RescueDamselKnight("格拉海德", rescueDamselQuest);
        // 救美骑士执行任务
        rescueDamselKnight.embarkOnQuest();
    }

}

运行testRescueDamselKnight()方法,查看结果
在这里插入图片描述

5) 创建新救美骑士测试类

test/java/net.huawei.spring.day01包里创建TestRescueDamselKnightNew
在这里插入图片描述

package net.aex.spring.day01;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.support.ClassPathXmlApplicationContext;

//采用Spring容器测试救美骑士类
public class TestRescueDamselKnightNew {
    private ClassPathXmlApplicationContext context; // 基于类路径XML配置文件的应用容器

    @Before // 每次测试方法执行前都要执行的代码
    public void init() {
        // 基于Spring配置文件创建应用容器
        context = new ClassPathXmlApplicationContext("xmlconfig/spring-config.xml");
        // 提示用户
        System.out.println("Spring应用容器已创建~");
    }

    @Test
    public void testRescueDamselKnight() {
        // 根据名称从应用容器里获取救美骑士对象
        RescueDamselKnight rescueDamselKnight = (RescueDamselKnight) context.getBean("Galahad");
        // 救美骑士执行任务
        rescueDamselKnight.embarkOnQuest();
    }

    @After // 每次测试方法执行后都要执行的代码
    public void destroy() {
        // 关闭应用容器
        context.close();
        // 提示用户
        System.out.println("Spring应用容器已关闭~");
    }

}

运行testRescueDamselKnight()测试方法,查看效果
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/344544.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创建Ubuntu虚拟机与Windows共享的文件夹

目录 1、Windows创建一个共享文件夹 2、在虚拟机的设置中选择Windows下的共享文件夹 3、在Ubuntu中查看共享文件夹 1、Windows创建一个共享文件夹 该共享文件夹可以被Windows和Ubuntu访问&#xff0c;需要注意的是&#xff0c;Ubuntu在共享目录下的一些操作会受到限制&…

图解经典电路之OCL差分功放-三极管分立器件电路分析

下面从简到繁,从框架到细节的顺序讲解电路。即先讲框架,然后逐渐添加电路细节,所以大家跟上思路。 1、第一步,尽可能的抽象这个电路,等效如下: 图二 OCL等效电路 整个OCL电路,可以等效为一个大功率的运放,加上几个电阻电容构成了一个同向放大器,就是这么简单。 为了便…

Linux常用命令---系统常用命令

Linux系统常用命令场景一&#xff1a; 查看当前系统内核版本相关信息场景二&#xff1a; sosreport 命令场景三&#xff1a; 如何定位并确定命令&#xff1f;场景四&#xff1a;查看当前系统运行负载怎场景五&#xff1a; 查看当前系统的内存可用情况场景六&#xff1a;查看网卡…

【DOTA】目标检测数据集介绍与使用

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 DOTA 数据集简单介绍 1. 正文 1.1 简介 数据集包含来自不同的传感器和平台的航拍图。每张图像的像素尺寸在 800 800 到 20,000 20,000 之间&#xf…

如何编写接口测试用例?

接口测试用例如何编写&#xff1f;下面简单给大家讲解一下。 接口测试用例是目前软件开发中不可或缺的一个重要部分&#xff0c;因此编写接口测试用例同样重要。 接口测试用例的作用非常明显&#xff0c;它能够帮助我们了解产品正在考验、调整它如何表现在特定情境之下、产品是…

2023金三银四,测试人还能找到好工作吗?

按照往年的惯例&#xff0c;春节后复工的 3 月、4 月是人员跳槽最频繁的时候&#xff0c;俗称“金三银四”。然而&#xff0c;市场大环境的影响&#xff0c;很多行业感受到了一丝寒冷的气息。我们以为受影响比较轻的互联网行业&#xff0c;头上也充满乌云&#xff0c;所谓互联网…

2023年浙江交安安全员考试题库及答案

百分百题库提供交安安全员考试试题、交安安全员考试真题、交安安全员证考试题库等&#xff0c;提供在线做题刷题&#xff0c;在线模拟考试&#xff0c;助你考试轻松过关。 50.根据《建设工程安全生产管理条例》第65条规定&#xff0c;施工单位有下列&#xff08;&#xff09;行…

JavaScript高级程序设计读书分享之3章——3.5操作符

JavaScript高级程序设计(第4版)读书分享笔记记录 适用于刚入门前端的同志 目录 操作符 一元操作符 递增/递减操作符 一元加和减 布尔操作符 逻辑非 逻辑与 逻辑或 乘性操作符 乘法操作符 除法操作符 取模操作符 加性操作符 加法操作符 减法操作符 关系操作符 相等操…

使用python将EXCEL表格中数据转存到数据库

使用Python将excel表格中数据转存到数据库 1. 思路&#xff1a; 1&#xff09; 使用python读取excel表格中数据 2&#xff09;根据数据生成sql语句 3&#xff09;批量运行sql语句 2. 代码&#xff1a; import pandas as pddef readExcel(path, excel_file):return pd.read_e…

低代码开发平台|制造管理-质检管理搭建指南

1、简介1.1、案例简介本文将介绍&#xff0c;如何搭建制造管理-质检管理。1.2、应用场景质检分别包括来料质检、过程质检、成品质检&#xff0c;来料质检在采购物料入库后会自动发起来料质检的流程&#xff0c;质检合格才可提交结束流程&#xff1b;过程检是在生产过程中的质检…

小程序-滑块+iconfont下载本地使用

效果 <view style"padding: 5px;"><movable-area style"width: 100%;height: 100%;"><movable-view direction"all" style"width: 50px;height: 50px;background-color: green"> </movable-view></movable…

推荐一些不常见的搜索引擎

5.雅虎网来自 Yahoo.com 的屏幕截图&#xff0c;2023 年 2 月截至 2022 年 1 月&#xff0c;Yahoo.com&#xff08;Verizon Media&#xff09;的搜索市场份额为 11.2%。雅虎的优势在于多元化&#xff0c;除搜索外还提供电子邮件、新闻、金融等服务。二十多年来&#xff0c;雅虎…

MyBatis 之一(概念、创建项目、操作模式、交互流程)

1. MyBatis 是什么MyBatis 是一款优秀的持久层框架MyBatis 也是一个 ORM &#xff08;Object Relational Mapping&#xff09;框架&#xff0c;即对象关系映射它支持自定义 SQL、存储过程以及高级映射MyBatis 去除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作MyBatis…

SpringAOP笔记【JavaEE】

SpringAOP 一、AOP理解 AOP是一种思想&#xff0c;SpringAOP是一个框架&#xff0c;提供了一种对AOP思想的实现&#xff0c;他们的关系就像MVC和SpringMVC、IOC与DI类似。 AOP为Aspect Oriented Programming的缩写&#xff0c;意为&#xff1a;面向切面编程&#xff0c;通过预…

CHAPTER 1 Zabbix介绍及安装

Zabbix介绍及安装1.1 Zabbix监控1 为什么要监控1.1 网站可用性2 监控什么东西2.1 监控范畴3 怎么来监控3.1 远程管理服务器3.2 监控硬件3.3 查看cpu相关3.4 内存3.5 磁盘3.6 监控网络4 监控工具总览5 zabbix介绍5.1 zabbix的组成5.2 zabbix监控范畴1.2 安装zabbix1 环境检查2 安…

磁疗为什么“没效果”?原来真相是这样!

很多人磁疗之后&#xff0c; 总爱迫不及待问一个问题&#xff1a; “这个多长时间见效啊&#xff1f;” …… 还有些人几天没有效果&#xff0c; 就果断下结论&#xff1a; “这东西没用&#xff01;” …… 有不少人错误地把磁疗等同于“药品”一样看待&#xff0c;总觉得…

RPA+保险后台部门擦出不一样“火花” | RPA案例

在保险行业中&#xff0c;后台业务线主要是为前台和中台等提供支持&#xff0c;提供公司整体运营服务&#xff0c;包括财务、信息、人力、综合办等。相对于中前台部门&#xff0c;后台部门离核心价值链更远一些&#xff0c;更偏支持部门&#xff0c;其中某些岗位与业务相关度强…

金三银四面试必看,复盘字节测试开发面试:一次测试负责人岗位面试总结

最近面试了某企业的测试负责人岗位&#xff0c;历经四面&#xff0c;收获蛮多的。 这篇文章&#xff0c;我想聊聊这次面试过程中的一些经历&#xff0c;以及些许经验和教训。 岗位要求 岗位名称&#xff1a;测试负责人 岗位要求&#xff1a;1、扎实的技术以及丰富的技术项目…

【半监督医学图像分割 2021 CVPR】CVRL 论文翻译

文章目录【半监督医学图像分割 2021 CVPR】CVRL 论文翻译摘要1. 介绍1.1 总览1.2 无监督对比学习2. 实验3. 总结【半监督医学图像分割 2021 CVPR】CVRL 论文翻译 论文题目&#xff1a;Momentum Contrastive Voxel-wise Representation Learning for Semi-supervised Volumetric…

Linux中systemctl 服务管理

1、概述CentOS 7使用Systemd管理守护进程。centos7采用 systemd管理&#xff0c;服务独立的运行在内存中&#xff0c;服务响应速度快&#xff0c;但占用更多内存。独立服务的服务启动脚本都在目录 /usr/lib/systemd/system里。Systend的新特性&#xff1a;系统引导时实现服务的…