初识Spring:如何在Maven工程上搭建Spring框架?

2023-11-16

编译软件:IntelliJ IDEA 2019.2.4 x64
操作系统:win10 x64 位 家庭版
Maven版本:apache-maven-3.6.3
Mybatis版本:3.5.6
spring版本:5.3.1



Spring系列专栏文章目录


一. 什么是Spring?

Spring 是一个开源的 Java 应用程序框架,由 Rod Johnson 在 2003 年创建。它为企业级应用程序的开发提供了全面的基础设施支持和丰富的功能特性,包括依赖注入、面向切面编程、事务管理、数据访问、Web 应用、消息传递等。

在这里插入图片描述

Spring 框架具有轻量级、可扩展性强、容易使用和优秀文档等诸多优点,广泛应用于各种类型的 Java 项目中。它是目前最流行的 Java 开发框架之一,已经成为 Java 社区的标准技术之一。

简而言之,Spring是一个IOC(DI)和AOP容器框架,为简化企业级开发而生的开源框架。

什么是IOC?

IOC,英文全称为Inversion of Control【控制反转】,即将对象【万物皆对象】控制权交整个Spring

什么是DI?

DI,英文全称为Dependency Injection,即依赖注入

什么是AOP?

AOP,英文全称为Aspect Oriented Programming ,即面向切面编程

spring官网地址:https://spring.io/

使用spring获取对象前后对比:

在这里插入图片描述


二. 如何搭建Spring框架?(入门案例)

步骤:

  1. 导入spring的相关jar包
  2. 编写配置文件(将对象装配到IOC中)
  3. 使用核心类库

入门案例:创建Student类,在配置文件中将该类对象stuTest装配到IOC中,设置相应属性,最后使用Spring框架其核心类库获取并打印对象stuTest的信息。

准备:建立Student类

在这里插入图片描述

①导入spring的相关jar包

代码示例如下:

<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-context</artifactId>
    <version>5.3.1</version>
</dependency>

②编写配置文件(将对象装配到IOC容器中)

配置文件命名一般命名为applicationContext.xml【beans.xml或spring.xml】

位置src/main/resources目录下

代码示例如下:

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

    <!-- 将对象装配到IOC容器中-->
     <bean id="stuTest" class="spring.pojo.Student">
         <!--  给对象stuTest添加属性          -->
         <property name="id" value="101"></property>
         <property name="name" value="jack"></property>
     </bean>
</beans>

③使用核心类库

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import spring.pojo.Student;

public class TestSpring {

    @Test
    public void test01(){
         //创建容器对象(spring是一个容器)
        ApplicationContext iocObj=new 					    		                             ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器对象获取需要的对象
        Student stuTest = (Student) iocObj.getBean("stuTest");
        System.out.println(stuTest);

    }

}

在这里插入图片描述


三 Spring有哪些特性?

  • 非侵入式基于Spring开发的应用中的对象可以不依赖于Spring的API

    如何理解?

    对比Servlet,Servlet是侵入式的,当我们想要使用Servlet时以创建一个Servlet类,它继承HttpServlet,看似没有实现Servlet接口,但它所继承的父类HttpServle自己实现了Servlet接口。故此像这种实现功能必须继承或实现某个接口,被称为侵入式;使用Spring开发就不一样,它是直接将对象装配到IOC中,测试运行时只需要创建容器对象,再从中获取需要的对象。

  • 容器Spring是一个容器,因为它包含并且管理应用对象的生命周期。

    如何理解?

    在应用开发时,我们只需要将对象装入spring这个容器中,并且需要时直接从里拿

  • 组件化Spring实现了使用简单的组件配置组合成一个复杂的应用。在Spring中可以使用XML和java注解组合使用这些对象

  • 一站式在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库

    ps:实际上Spring自身也提供了表述层的SpringMVC和持久层的DBCTemplate


四. Spring中如何获取容器中的对象?(getBean()方法)

getBean()方法有以下五种重载形式,如下图所示。

在这里插入图片描述

ps:这里暂时只讨论前三种

方式:

  • getBean(String beanId)通过beanld获取对象

    不足:需要强制类型转换,不灵活

    示例代码如下:

    public void test01(){
        //创建容器对象(spring是一个容器)
        ApplicationContext iocObj=new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器对象获取需要的对象
        Student stuTest = (Student) iocObj.getBean("stuTest");
        System.out.println(stuTest);
    
    }
    
  • getBean(Class aClass)通过Class方式获取对象

    不足:容器中有多个相同类型bean的时候,会报如下错误:

    expected single matching bean but found 2:stuZhenzhong,stuZhouxu
    

    案例演示:在配置文件中装配两个相同类型的对象进spring容器中,然后测试效果

    示例代码如下:

    <?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">
    
        <!-- 将对象装配到IOC容器中-->
         <bean id="stuTest" class="spring.pojo.Student">
             <!--  给对象stuTest添加属性          -->
             <property name="id" value="101"></property>
             <property name="name" value="jack"></property>
         </bean>
    
        <bean id="stulisi" class="spring.pojo.Student">
            <!--  给对象stuTest添加属性          -->
            <property name="id" value="102"></property>
            <property name="name" value="李四"></property>
        </bean>
    
    
    </beans>
    

    ②测试运行

    @Test
    public void test01(){
        //创建容器对象(spring是一个容器)
        ApplicationContext iocObj=new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器对象获取需要的对象
    
       /*
       //方式1
        Student stuTest = (Student) iocObj.getBean("stuTest");
        System.out.println(stuTest);
        */
    
       //方式2
        Student bean = iocObj.getBean(Student.class);
        System.out.println(bean);
    }
    

    在这里插入图片描述
    在这里插入图片描述

  • getBean(String beanld,Class aClass)通过beanld和Class获取对象

    优势:使用此方式可避免需要强制类型转和规避因为容器内存在多个相同类型的对象而产生的报错问题

    非常推荐使用!!!

    示例代码如下:

    @Test
    public void test01(){
        //创建容器对象(spring是一个容器)
        ApplicationContext iocObj=new ClassPathXmlApplicationContext("applicationContext.xml");
        //通过容器对象获取需要的对象
    
       /*
       //方式1
        Student stuTest = (Student) iocObj.getBean("stuTest");
        System.out.println(stuTest);
        */
    
       //方式2
    /*    Student bean = iocObj.getBean(Student.class);
        System.out.println(bean);*/
    
        //方式3
        Student stuTest = iocObj.getBean("stuTest", Student.class);
        System.out.println(stuTest);
    
    }
    

    在这里插入图片描述

注意:

框架默认都是通过无参构造器帮助我们创建对象。所以如提供对象的构造器时,一定要添加无参构造器


五. 详解配置文件中的bean标签

属性:

  • idbean的唯一标识
  • class定义bean的类型【class全类名】

子标签:

  • property属性为对象中属性赋值【set注入】
  • name属性设置属性名称
  • value属性设置属性数值

示例代码如下:

  <!-- 将对象装配到IOC容器中-->
     <bean id="stuTest" class="spring.pojo.Student">
         <!--  给对象stuTest添加属性          -->
         <property name="id" value="101"></property>
         <property name="name" value="jack"></property>
    </bean>

详解如下:

该 XML 配置定义了一个名为 “stuTest” 的 Spring Bean,并将其实现类设置为 “spring.pojo.Student”。Bean 具有两个属性:“id” 和 “name”,分别被设置为整数值 101 和字符串值 “jack”。

这里使用的是 set 方法注入属性值,即通过调用 setter 方法将某些值传递给对象。具体来说,这里使用了 property 元素来配置属性注入,其中 name 属性指定 Bean 类中相应属性的名称,value 属性则指定要注入的属性值。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

初识Spring:如何在Maven工程上搭建Spring框架? 的相关文章

随机推荐

  • Python学习经典书籍完整书单整理!!!

    一 Python 基础 01 Python编程 从入门到实践 第2版 本书是针对所有层次Python读者而作的Python入门书 让你可以快速学会Python编程 通过这本书 你将会学到各种Python库和工具 NumPy Pygal等 制
  • 初学gitlab上传代码实践

    初学Gitlabs上传代码实践 1 登录gitlab web页面 2 新建一个项目 可以默认系统的选项 点击创建 成功 3 回到window桌面上 右击选git bash here 前提你已经安装了git本地软件 这个作用是创建密钥 4 c
  • Spring IOC容器初始化主体流程

    文章目录 Spring IOC容器初始化主体流程 Spring IOC的容器体系 Bean生命周期关键时机点 SpringIOC容器初始化主流程 BeanFactory创建流程 获取BeanFactory子流程 BeanDefinition
  • zabbix自动发现,端口 url检测

    一 自动发现 1 开启自动发现 配置自动发现 修改自动发现的网段 启用自动发现 2 配置自动发现的动作 配置自动发现的动作 添加动作的IP地址 添加自动发现的操作 启用动作 3 检验 二 自动注册 1 修改agent配置 所有agent机器
  • nginx反向代理配置

    一 Nginx是什么 1 Nginx engine x 是一个高性能的HTTP和反向代理web服务器 同时也提供了IMAP POP3 SMTP服务 2 Nginx是一款轻量级的Web 服务器 反向代理服务器及电子邮件 IMAP POP3 代
  • Redis学习总结之zset类型

    sorted set是set的一个升级版本 在set的基础上增加了一个顺序属性 这一属性在添加修改元素的时候可以指定 每次指定后 zset会自动重新按新的值调整顺序 可以理解为有两列的mysql表 一列存value 一列存顺序 操作中key
  • 用vue+element实现表格键盘上下键单选中行效果

    使用element的table组件 如果还想要实现上下键选中行效果的话 可以试试以下方法 主要是通过监听键盘事件实现的 如果还需要表格上下键时保持被选中行一直在视野中的话 可以在监听事件中根据当前行的位置动态设置表格的滚动距离实现 现在先不
  • 根据平台不同,运行不同的代码,设置不同的参数

    根据平台不同 运行不同的代码 设置不同的参数 方法一 os name 方法二 platform system python根据平台不同 运行不同的代码 设置不同的参数 方法一 os name os name字符串指示你正在使用的平台 比如对
  • mysql设置远程连接账号密码方法

    GRANT ALL PRIVILEGES ON TO myuser IDENTIFIED BY mypassword WITH GRANT OPTION
  • CocosCreator接入GoogleAdMob激励广告

    我们的App需要通过接入广告的方式来赚取收入 其中GoogleAdMob就是比较简单容易实现的一种 我在文章中接入GoogleAdmob的方式是通过AndroidStudio原生来接入的 一 前提条件 使用 Android Studio 1
  • new Date()对象的格式处理

    new Date 对象的格式处理 new Date year month date hrs min sec 可以用 2021 2 18 这种格式 不可以用2021 2 18 date new Date 获取当前时间戳 年 date getF
  • Java生成doc文档二(做一个简单的封面)

    在上一篇博客中 我们提到了三个重要的概念 下面来就来实际做一个word文档的封面 我们创建的是Maven项目 添加两个Maven依赖如下
  • 如何从c++代码调用Linux C库?Barcode Reader Toolkit 常见问题集锦

    Softek条形码阅读器是一个工具包 允许开发人员在其应用程序中添加条形码检测 该工具包将图像文件或内存位图作为输入 并返回有关每个条形码的信息 包括值 类型和位置 通过Barcode Reader Toolkit这款条码开发工具包 SDK
  • Xcode5.1离线下载安装及使用iOS5模拟器进行开发调试的方法

    Xcode5 1默认不支持iOS5版本的模拟器开发调试 在OS X Mavericks 10 9 x 下默认只能支持iOS6 1及以上版本的模拟器 在OS X Mountain Lion 10 8 x 下默认只能支持iOS6 0及以上版本的
  • [Python从零到壹] 六十四.图像识别及经典案例篇之图像傅里叶变换和傅里叶逆变换详解

    祝大家新年快乐 阖家幸福 健康快乐 欢迎大家来到 Python从零到壹 在这里我将分享约200篇Python系列文章 带大家一起去学习和玩耍 看看Python这个有趣的世界 所有文章都将结合案例 代码和作者的经验讲解 真心想把自己近十年的编
  • android开发之仿QQ拖拽界面效果(侧滑面板)

    http blog csdn net zanelove article details 45649435 仿QQ拖拽界面效果 侧滑面板 我们一般继承Layout 不会直接去继承ViewGroup 而是继承FrameLayout 为什么五大布
  • 深度学习框架pytorch快速开发与实战chapter4

    报错 第一个 这个错应该和我前面网络不行断网了有关 我删除了目录下的data文件夹重新跑一次就ok了 第二个 老问题就还是data 改成item 前馈神经网络 import torch import torch nn as nn impor
  • Vision Transformer图像分类(MindSpore实现)

    Vision Transformer进行图像分类 Vision Transformer ViT 简介 近些年 随着基于自注意 Self Attention 结构的模型的发展 特别是Transformer模型的提出 极大的促进了自然语言处理模
  • 4K和UHD的区别

    在过去 很多电视制造商 播音员和科技博文都将UHD和4K这两个词汇混为一谈 现在我要申明的是 4K和UHD 超高清画质 不是一回事 不错 很多消费者都认为这两者没有什么实质的差别 但是正是如此 很多顾客因此被所谓的 准高清 显示器忽悠了 因
  • 初识Spring:如何在Maven工程上搭建Spring框架?

    编译软件 IntelliJ IDEA 2019 2 4 x64 操作系统 win10 x64 位 家庭版 Maven版本 apache maven 3 6 3 Mybatis版本 3 5 6 spring版本 5 3 1 文章目录 Spri