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

news2024/11/18 9:41:03

编译软件: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框架?(入门案例)
  • 三 Spring有哪些特性?
  • 四. Spring中如何获取容器中的对象?(getBean()方法)
  • 五. 详解配置文件中的bean标签


Spring系列专栏文章目录

  • 第一章:初识Spring:如何在Maven工程上搭建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 属性则指定要注入的属性值。

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

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

相关文章

基于海鸥算法改进的随机森林分类算法-附代码

基于海鸥算法改进的随机森林分类算法 文章目录 基于海鸥算法改进的随机森林分类算法1.数据集2.RF模型3.基于海鸥算法优化的RF4.测试结果5.Matlab代码6.Python代码 摘要&#xff1a;为了提高随机森林数据的分类预测准确率&#xff0c;对随机森林中的树木个数和最小叶子点数参数利…

Java阶段二Day13

Java阶段二Day13 文章目录 Java阶段二Day13网站SpringSpringFramework核心模块特点使用Spring创建项目对象存储创建对象的方式 IoC容器控制反转依赖注入IoC容器的实现 基于XML管理bean获取bean方式xml配置文件中的标签特殊值处理注入 今天开始是学习后端框架SSM&#xff08;Spr…

元气森林讲出新的“可乐味”故事?

这个五一&#xff0c;一场接一场的音乐节不断拔高假日的声浪。仅成都一市&#xff0c;就开展了298场演出&#xff0c;累计吸引10万余游客市民观看。人潮涌动之间&#xff0c;节日的氛围被拉满。 值得一提的是&#xff0c;音乐节不仅是游客的狂欢&#xff0c;也是消费品牌的盛宴…

【Java|golang】1419. 数青蛙

给你一个字符串 croakOfFrogs&#xff0c;它表示不同青蛙发出的蛙鸣声&#xff08;字符串 “croak” &#xff09;的组合。由于同一时间可以有多只青蛙呱呱作响&#xff0c;所以 croakOfFrogs 中会混合多个 “croak” 。 请你返回模拟字符串中所有蛙鸣所需不同青蛙的最少数目。…

Spring Boot集成ShardingSphere实现读写分离(四) | Spring Cloud 43

一、读写分离 1.1 背景 面对日益增加的系统访问量&#xff0c;数据库的吞吐量面临着巨大瓶颈。 对于同一时刻有大量并发读操作和较少写操作类型的应用系统来说&#xff0c;将数据库拆分为主库和从库&#xff0c;主库负责处理事务性的增删改操作&#xff0c;从库负责处理查询操…

Qt的Model/View结构

Model/View结构 将界面组件与所编辑的数据分离开来&#xff0c;又通过数据源的方式连接起来&#xff0c;是处理界面与数据的一种较好的方式。Qt使用Model/View结构来处理这种关系&#xff0c;Model/View的基本结构如图5-1所示。其中各部分的功能如下。 图1 Model/View基本结构…

ps磨皮插件专用智能磨皮插件 AI算法美颜 提高P图效率

ps的功能这么强大&#xff0c;其美白磨皮方法当然不止一种。本文就给大家细数一下ps美白磨皮常用的几种方法。在各种方法中&#xff0c;插件法的操作更为简单&#xff0c;效果也更好&#xff0c;因此我们还会介绍ps磨皮美白插件哪个好。事不宜迟&#xff0c;一起来看看吧。 一…

Throwable、Error、Exception 运行时异常、非运行时异常

一、Throwable Throwable类&#xff08;可抛出&#xff09;是一个超类&#xff0c;是所有错误和异常根。只有继承于Throwable的类或者其子类才能够被抛出。 有两个子类为Error和Exception&#xff0c;其他的异常类都继承于这两个子类。 三、Error和Exception Error类及其子类…

C++知识点 -- 智能指针

C知识点 – 智能指针 文章目录 C知识点 -- 智能指针一、智能指针的使用及原理1.使用场景2.RAII3.智能指针的设计思想4.智能指针的拷贝问题 二、auto_ptr三、unique_ptr四、shared_ptr1.模拟实现2.shared_ptr的循环引用 五、weak_ptr六、定制删除器七、内存泄漏1.什么是内存泄漏…

PDF转Word免费的软件有哪些?(完整教程版!)

这五种免费PDF转Word的方式&#xff0c;不仅免费&#xff0c;还能准确恢复PDF文件内容&#xff0c;前方高能&#xff0c;快速学习&#xff01; 1.Office直接打开 大厂软件&#xff0c;既能读文档又能转换格式&#xff0c;总让人放心。 转换流程1&#xff1a;在Word的最新版本…

Zero系列三部曲:Zero、Zero-Offload、Zero-Infinity

Zero系列三部曲&#xff1a;Zero、Zero-Offload、Zero-Infinity ZeroIntroductionZero DP流程图详解 Zero-R Zero-OffloadZero- Infinityreference Zero Introduction 以数据并行为例&#xff0c;在训练的时候&#xff0c;首先把模型参数在每个GPU上复制一份&#xff0c;然后…

IP报文解析(TCP、UDP、 ICMP)及代码分享(C++)

一、OSI模型与TCP/IP协议栈 1.1 OSI 7层模型&#xff1a; 应用层&#xff1a; 功能&#xff1a;用户接口&#xff0c;文件传输、电子邮件、虚拟终端、文件服务 设备&#xff1a;网关 协议&#xff1a;HTTP、TFTP、SMTP、FTP、SNMP、DNS、Telnet 表示层&#xff1a; 功能&…

Spring 面试题总结(2023最新版)

文章目录 1、谈谈你对Spring的理解&#xff1f;1.1 发展历程1.2 Spirng的组成1.3 Spring的好处 2、Autowired和Resource的区别2.1 共同点&#xff1a;2.2 Autowired2.3 Resource2.3.1 Resource的装配顺序 3、Spring常用注解3.1、给容器中注入组件3.1.1 包扫描组件标注注解3.1.2…

复数的基本知识

复数的基本知识 文章目录 复数的基本知识前言表示方法百度百科简单来说&#xff1a; 复数的运算 前言 这里只有一点点关于复数的知识&#xff0c;主要是最近的FFT要用到。 表示方法 百度百科 我们把形如 abi &#xff08;a,b均为实数&#xff09;的数称为复数&#xff0c;其…

c++ “拷贝构造,运算符重载”

1.拷贝构造 拷贝构造的意思为&#xff1a;创造一个对象并拷贝另一个对象. 拷贝构造的名字与类的名字一致&#xff0c;参数一般为引用&#xff0c;若类中为无拷贝构造&#xff0c;编译器会自动生成默认拷贝构造函数&#xff0c;这种默认的拷贝构造函数只能拷贝内容&#xff0c;不…

安装并使用JupyterLab

背景 JupyterLab 是用于笔记本、代码和数据的最新的基于 Web 的交互式开发环境。其灵活的界面允许用户配置和安排数据科学、科学计算、机器学习方面的工作流程。模块化设计邀请扩展来扩展和丰富功能。 部署 要在本机搭建 Jupyter Notebook 平台进行机器学习项目&#xff0c;…

【Python入门篇】——Python基础语法(字符串扩展和格式化的精度控制)

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; Python入门&#xff0c;本专栏主要内容为Python的基础语法&#xff0c;Python中的选择循环语句…

网络安全之IPSEC路由基本配置

目录 网络安全之IPSEC路由基本配置 IPSEC配置的前提分析 协议分析 传输模式分析​编辑 IPSEC路由中的配置 图谱图 配置公网可达 R1配置IKE SA的安全提议 R1配置 IKE SA 的身份认证信息 R3配置IKE SA的安全提议 R3配置 IKE SA 的身份认证信息 R1配置IPSEC的安全提议…

112-Linux_mysql数据库的安装

文章目录 一.数据库介绍1.数据库2.数据库的分类 二.mysql安装及设置1.安装mysql2.初始化配置(1)设置数据库不进行密码强校验(2)设置root管理员密码(3)设置是否要删除匿名用户&#xff0c;这里不删除(4)设置是否允许root用户远程登录&#xff0c;这里设置允许(5)是否删除test库&…

硬件设计 之 PCIe常用知识

以下是本人在自己在设计PCIe中常遇到的一些知识&#xff0c;对他们进行了简单整理一下&#xff0c;包括基本定义、传输速率、layout要求等。比如作为硬件工程师要了解芯片架构&#xff0c;哪些PCIe接口可以使用&#xff0c;使用这些PCIe要做什么&#xff0c;需要使用PCIe x1还是…