Java企业级信息系统开发01—采用spring配置文件管理bean

文章目录

  • 一、Web开发技术
  • 二、spring框架
    • (一)spring官网
    • (二)spring框架优点
    • (三)Spring框架核心概念
      • 1、IoC(Inversion of Control)和容器
      • 2、AOP(Aspect-Oriented Programming)框架
    • (四)Spring Framework架构图
    • (五)Spring框架主要组件及其功能
  • 三、Spring容器演示——采用Spring配置文件管理Bean
    • (一)创建Maven项目
    • (二)添加Spring依赖
    • (三)创建杀龙任务类
    • (四)创建勇敢骑士类
    • (五)采用传统方式让勇敢骑士完成杀龙任务
    • (六)采用Spring容器让勇敢骑士完成杀龙任务

一、Web开发技术

  • web开发技术思维导图
    在这里插入图片描述

二、spring框架

(一)spring官网

  • 网址:https://spring.io/
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 目前(2023-2-13)Spring Framework版本是6.0.4

(二)spring框架优点

1.Spring makes Java productive.
2.Spring makes Java reactive.
3.Spring makes Java cloud-ready.
4.Spring makes Java simple.
5.Spring makes Java modern.

(三)Spring框架核心概念

1、IoC(Inversion of Control)和容器

2、AOP(Aspect-Oriented Programming)框架

(四)Spring Framework架构图

在这里插入图片描述

  • 基于IoC(DI)和AOP两大强力支柱,Spring Framework提供给Java开发者一种全新的(就当时而言)开发体验。与当时的其他框架都不同,Spring Framework并不只是一种通用框架,更多时候Spring Framework在充当一种类似于胶水的角色,将不同的组件整合在一起最终形成完备的系统。 所以,它不仅为开发者提供各种便利性,而且具备将Java生态中的主流开源框架(如Hibernate、iBatis等)和Java语言规范(如JDBC、JMX、JMS等)融合的能力。此外,Spring Framework提倡无侵入式编程,既可以让开发者享受使用框架的好处,又省却了与框架代码过度耦合的烦恼。 典型的Spring应用有两部分组成:一部分是与系统功能强相关的业务逻辑,另一部分是与业务无关的框架代码,但此类框架代码大部分已经被Spring简化,开发者只需利用IoC和AOP技术,通过简单的配置(前期以XML为主,在JDK 1.5之后以注释(Annotation)为主)将二者融合在一起形成功能完整的Java应用。

(五)Spring框架主要组件及其功能

在这里插入图片描述

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

(一)创建Maven项目

  • 创建Maven项目 - SpringDemo,设置项目位置以及组ID
    在这里插入图片描述
  • 单击【Finish】按钮,pom(project object model)对项目的版本、依赖与插件进行管理
    在这里插入图片描述
  • 修改项目的Maven配置
    在这里插入图片描述

(二)添加Spring依赖

  • Spring框架与JDK版本对应关系
    在这里插入图片描述
  • 在Maven仓库里查找Spring框架(https://mvnrepository.com)
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 添加依赖
    在这里插入图片描述
<?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.huawei.spring</groupId>
    <artifactId>SpringDemo</artifactId>
    <version>1.0-SNAPSHOT</version>

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


  • 打开Maven窗口,单击刷新按钮,就开始下载依赖包,等待插件与依赖下载完成
    在这里插入图片描述

(三)创建杀龙任务类

  • 创建net.[name].spring.day01包,然后在包里面创建SlayDragonQuest类 在这里插入图片描述
package net.huawei.spring.day01;

/**
 * 功能:杀龙任务类
 */
public class SlayDragonQuest {
    public void embark() {
        System.out.println("执行杀龙任务……");
    }
}


(四)创建勇敢骑士类

  • 在net.huawei.spring.day01包里创建BraveKnight类
    在这里插入图片描述
package net.huawei.spring.day01;

/**
 * 功能:勇敢骑士类
 */
public class BraveKnight {
    private String name; // 骑士姓名
    private SlayDragonQuest slayDragonQuest; // 杀龙任务

    public String getName() {
        return name;
    }

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

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

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


(五)采用传统方式让勇敢骑士完成杀龙任务

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

import org.junit.Test;

/**
 * 功能:采用传统方式测试勇敢骑士类
 */
public class TestBraveKnightOld {
    @Test
    public void testBraveKnight() {
        // 创建杀龙任务对象
        SlayDragonQuest slayDragonQuest = new SlayDragonQuest();
        // 创建勇敢骑士对象
        BraveKnight braveKnight = new BraveKnight();
        // 设置勇敢骑士属性
        braveKnight.setName("罗宾汉");
        braveKnight.setSlayDragonQuest(slayDragonQuest);
        // 调用勇敢骑士执行任务方法
        braveKnight.embarkOnQuest();
    }
}


  • 查看程序运行结果
    在这里插入图片描述
  • 出现这个问题要设置Java版本
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

(六)采用Spring容器让勇敢骑士完成杀龙任务

  • 在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

  • 在resources里创建xmlconfig目录,然后在里面创建spring-config.xml
    在这里插入图片描述
  • 输入Spring配置文件名
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 单击【Configure application context】(配置应用上下文)
    在这里插入图片描述
  • 单击【Create new application context…】(创建新的应用上下文),注意应用上下文名称是可以修改的
    在这里插入图片描述
  • 单击【OK】按钮
    在这里插入图片描述
  • 在项目结构窗口里查看配置好的spring-config.xml
    在这里插入图片描述
    1、创建杀龙任务Bean
<!--配置杀龙任务Bean-->
<bean id="slayDragonQuest" class="net.huawei.spring.day01.SlayDragonQuest"/>

  • id属性 :对应对象名,可以任取,然后在应用程序里我们可以通过这个id值从Spring容器中获取Bean对象。
  • class属性 :表明Bean对象是基于哪个类来实例化,注意一定要包含包名。
    2、创建勇敢骑士Bean
<!--配置勇敢骑士Bean-->                                                 
<bean id="braveKnight" class="net.huawei.spring.day01.BraveKnight"> 
    <property name="name" value="罗宾汉"/>  <!-- RobinHood.setName("罗宾汉")-->                        
    <property name="slayDragonQuest" ref="slayDragonQuest"/>  <!--RobinHood.setSlayDragonQuest(slayDragonQuest)-->  
</bean>                              

  • property元素:给对象设置属性值
  • name属性:Bean对象的属性名
  • ref属性:Bean对象的属性值(引用另一个Bean对象)
    勇敢骑士Bean通过元素将杀龙任务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.huawei.spring.day01.SlayDragonQuest"/>

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

  • 通过Spring配置文件,创建了两个Bean对象,它们之间存在依赖关系,第一个Bean对象是第二个Bean对象的任务属性值。
    在这里插入图片描述
  • 在test/java/net.huawei.spring.day01里创建TestBraveKnightNew测试类
    在这里插入图片描述
package net.huawei.spring.day01;

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

/**
 * 功能:采用Spring容器测试勇敢骑士类
 * 作者:华卫
 * 日期:2023年02月14日
 */
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
    在这里插入图片描述
  • 基于一个类可以创建多个对象,因此,在spring-config.xml文件里,也可以基于同一个类创建多个Bean。
  • 基于BraveKnight类再创建两个Bean,id值分别为knight1和knight2。
    在这里插入图片描述
  • 获取新建的两个勇敢骑士Bean,调用执行任务方法
    在这里插入图片描述
  • 执行testBraveKnight()测试方法,查看结果
    在这里插入图片描述
  • 勇敢骑士Bean采用属性注入方式将杀龙任务Bean注入作为其属性。
    在这里插入图片描述
  • 初始化对象其实可以调用有参构造方法来设置属性的初始值,对应到Spring的Bean工厂,就还有一种注入方式,叫做构造方法注入。同样地,我们还是通过案例来演示如何通过构造方法来注入属性值。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

间谍软件开发商利用漏洞利用链攻击移动生态系统

导语&#xff1a;间谍软件开发商结合使用了零日漏洞和已知漏洞。谷歌TAG的研究人员督促厂商和用户应加快给移动设备打补丁的步伐。 间谍软件开发商利用漏洞利用链攻击移动生态系统去年&#xff0c;几家商业间谍软件开发商开发并利用了针对 iOS 和安卓用户的零日漏洞。然而&…

【Python】什么是爬虫,爬虫实例

有s表示加密的访问方式 一、初识爬虫 什么是爬虫 网络爬虫&#xff0c;是一种按照一定规则&#xff0c;自动抓取互联网信息的程序或者脚本。由于互联网数据的多样性和资源的有限性&#xff0c;根据用户需求定向抓取相关网页并分析已成为如今主流的爬取策略爬虫可以做什么 你可以…

stream的collectors

起因的话&#xff0c;新进公司&#xff0c;看见了一段有意思的代码。 public final class MyCollectors {private MyCollectors() {}static final Set<Collector.Characteristics> CH_ID Collections.unmodifiableSet(EnumSet.of(Collector.Characteristics.IDENTITY_F…

从点赞到数字货币:揭秘Diem币与Facebook的联系

大家都知道Facebook是一个全球知名的社交媒体平台&#xff0c;但你是否听说过与Facebook有关的数字货币Diem币呢&#xff1f;或许你会想&#xff0c;从点赞到数字货币&#xff0c;这是怎么回事&#xff1f;别着急&#xff0c;让我们一起揭秘Diem币与Facebook的联系。 首先&…

rk平台调试音频(从驱动到apk)

需要实现的功能&#xff1a; 输入&#xff1a;hdmiin、uvc、mic可以实时切换 输出&#xff1a;耳机和HDMI OUT同时输出声音 这里注意&#xff1a;mic是存在hedset情况&#xff0c;4节耳机&#xff0c;即可输出又可输出同时进行 开发情况&#xff1a; 一、先熟悉大致的Andro…

ArcMap最短路径分析和网络数据集的构建

打断相交点 1.单击【编辑器】工具条上的编辑工具。 2.选择要在交叉点处进行分割的线要素。 3.单击【高级编辑】工具条上的打断相交线工具。 4.默认或可输入拓扑容差。 5.单击确定。 结果:所选线在相交处分割为多个新要素。“打断”操作还会移除叠置的线段-例如&#xff0…

怎么控制别人的电脑屏幕?

为什么需要控制别人的屏幕&#xff1f; 我们不可避免地会遇到一些情况&#xff0c;比如我们需要为我们的朋友、同事或家人提供有关 IT 相关问题的帮助&#xff0c;如果他们不知道它该怎么处理这些问题该怎么办呢&#xff1f; 这时&#xff0c;我们可能需要用我们的电脑…

测试20K要什么水平?25岁测试工程师成功斩下offer(附面试题)

年少不懂面试经&#xff0c;读懂已是测试人。 大家好&#xff0c;我是一名历经沧桑&#xff0c;看透互联网行业百态的测试从业者&#xff0c;经过数年的勤学苦练&#xff0c;精钻深研究&#xff0c;终于从初出茅庐的职场新手成长为现在的测试老鸟&#xff0c;早已看透了面试官…

三维数据学习笔记:ply数据内容介绍

目录 前言1. 三维数据的组成1.1 点云数据1.2 网格数据 2. ply数据内容2.1 属性2.1.1 文本描述属性2.1.2 数据描述属性2.1.2.1 顶点(vertex)2.1.2.2 面(face)2.1.2.3 相机(camera) 2.2 数据2.2.1 顶点(vertex)2.2.2 面(face)2.2.3 相机(camera) 3. 示例3.1 示例13.2 示例2 前言 …

Java基础(十七)File类与IO流

1. java.io.File类的使用 1.1 概述 File类及本章下的各种流&#xff0c;都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录&#xff08;俗称文件夹&#xff09;&#xff0c;与平台无关。&#xff08;体会万事万物皆对象&#xff09;File 能新…

JDK17新特性之--JDK9到JDK17 String 新增的新方法

JDK9之后对String底层存储数据结构进行了重大的修改1&#xff0c;同步也增加了许多新的方法&#xff0c;主要有Text Blocks、chars()、codePoints()、describeConstable()、formatted()、indent()、isBlank()、isEmpty()、lines()、repeat()、strip()、stripLeading()、stripIn…

DolphinScheduler 3.1.4详细教程

文章目录 第一章 DolphinScheduler介绍1.1 关于DolphinScheduler1.2 特性1.3 名词解释1.3.1 名词解释1.3.2 模块介绍 第二章 DolphinScheduler系统架构2.1 系统架构图2.2 架构说明该服务包含&#xff1a; 2.3 启动流程活动图2.4 架构设计思想2.4.1 去中心化vs中心化2.4.1.1 中心…

北京地铁:充分发挥数据价值,全面提升业财融合能力

4月19日-4月21日&#xff0c;一年一度的用友BIP技术大会圆满召开。来自行业领先企业的CIO/CDO、生态伙伴、开发者、分析师、媒体等共聚北京用友产业园&#xff0c;了解最新技术发展趋势、探讨行业热点话题。会上&#xff0c;北京地铁运营有限公司&#xff08;以下简称“北京地铁…

使用 ChatGPT 辅助学习——为自己找一个老师

我们每个人都有许多标签&#xff0c;例如高中生、成绩中等、文科&#xff0c;根据这些标签我和其他拥有相同标签的人分配了相同的教程、班级和老师&#xff0c;这可以带来效率上的提升&#xff0c;因为同一份教程、老师就可以服务几十上百人&#xff0c;而无须为每个人定制&…

2023年腾讯云轻量服务器性能评测

腾讯云轻量应用服务器性能评测 轻量应用服务器是腾讯云推出的一款开箱即用的轻量级的云服务器&#xff0c;轻量服务器CPU内存带宽配置更高&#xff0c;价格却又很便宜&#xff0c;很多同学认为是不是轻量应用服务器性能不行呀&#xff0c;轻量服务器和云服务器有什么区别&…

浪潮盒子IPBS9505-多遥控版-S905L/M2芯片-安卓4.4.2-线刷固件包

浪潮盒子IPBS9505-多遥控版-S905L&#xff0f;M2芯片-安卓4.4.2-线刷固件包-内有教程和短接点-当贝纯净桌面。 特点&#xff1a; 1、适用于对应型号的电视盒子刷机&#xff1b; 2、开放原厂固件屏蔽的市场安装和u盘安装apk&#xff1b; 3、修改dns&#xff0c;三网通用&…

因子挖掘框架cs优缺点介绍和使用说明

cs框架的优点和缺点 优点和ts一样,就是速度非常快缺点有好几个:必须使用根据过去一定天数计算因子值,持有一定天数之后再平衡的模式;必须使用连续的数据,如果是期货期权等需要合成连续数据。资金不足的时候不会拒单。cs框架使用方法 设计理念 计算因子由用户进行计算,因…

Springboot +Flowable,任务认领和回退(一)

一.简介 有的时候&#xff0c;一个任务节点会存在多个候选人&#xff0c;例如&#xff1a;张三提交一个任务&#xff0c;这个任务即可以由李四处理&#xff0c;又可以由王五处理&#xff0c;那么针对这种多个任务候选人的情况&#xff0c;该如何处理&#xff1f; 二.绘制流程…

项目管理-数据管理能力DCMM模型

DCMM 数据管理能力成熟度评估模型简介 DCMM&#xff08;Data Management Capability Maturity Assessment Model&#xff0c;数据管理能力成熟度评估模型&#xff09;是我国首个数据管理领域国家标准。该标准将组织对象的数据管理划分为八大能力域&#xff08;数据战略、数据治…

python4delphi之初体验

最近需要做一个excel导入的工具, excel表格是python的强项,于是想delphi结合python实现 delphi环境xe2 python 3.6.6 上图可以看到,真的很爽,我在vscode写python脚本,然后给delphi调用 读取了一个excel文件,打印出了列头。 最爽的是,我在没wps,office环境的机…
最新文章