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

简介: 初识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

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 属性则指定要注入的属性值。

相关文章
|
20天前
|
XML 安全 Java
|
24天前
|
缓存 NoSQL Java
什么是缓存?如何在 Spring Boot 中使用缓存框架
什么是缓存?如何在 Spring Boot 中使用缓存框架
31 0
|
1月前
|
数据采集 监控 前端开发
二级公立医院绩效考核系统源码,B/S架构,前后端分别基于Spring Boot和Avue框架
医院绩效管理系统通过与HIS系统的无缝对接,实现数据网络化采集、评价结果透明化管理及奖金分配自动化生成。系统涵盖科室和个人绩效考核、医疗质量考核、数据采集、绩效工资核算、收支核算、工作量统计、单项奖惩等功能,提升绩效评估的全面性、准确性和公正性。技术栈采用B/S架构,前后端分别基于Spring Boot和Avue框架。
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
58 4
|
2月前
|
JavaScript 安全 Java
如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架
本文介绍了如何使用 Spring Boot 和 Ant Design Pro Vue 实现动态路由和菜单功能,快速搭建前后端分离的应用框架。首先,确保开发环境已安装必要的工具,然后创建并配置 Spring Boot 项目,包括添加依赖和配置 Spring Security。接着,创建后端 API 和前端项目,配置动态路由和菜单。最后,运行项目并分享实践心得,包括版本兼容性、安全性、性能调优等方面。
178 1
|
2月前
|
Java API 数据库
Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐
本文通过在线图书管理系统案例,详细介绍如何使用Spring Boot构建RESTful API。从项目基础环境搭建、实体类与数据访问层定义,到业务逻辑实现和控制器编写,逐步展示了Spring Boot的简洁配置和强大功能。最后,通过Postman测试API,并介绍了如何添加安全性和异常处理,确保API的稳定性和安全性。
45 0
|
6天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
24 5
|
16天前
|
缓存 Java 数据库连接
Spring框架中的事件机制:深入理解与实践
Spring框架是一个广泛使用的Java企业级应用框架,提供了依赖注入、面向切面编程(AOP)、事务管理、Web应用程序开发等一系列功能。在Spring框架中,事件机制是一种重要的通信方式,它允许不同组件之间进行松耦合的通信,提高了应用程序的可维护性和可扩展性。本文将深入探讨Spring框架中的事件机制,包括不同类型的事件、底层原理、应用实践以及优缺点。
47 8
|
26天前
|
存储 Java 关系型数据库
在Spring Boot中整合Seata框架实现分布式事务
可以在 Spring Boot 中成功整合 Seata 框架,实现分布式事务的管理和处理。在实际应用中,还需要根据具体的业务需求和技术架构进行进一步的优化和调整。同时,要注意处理各种可能出现的问题,以保障分布式事务的顺利执行。
46 6
|
1月前
|
Java 数据库连接 数据库
不可不知道的Spring 框架七大模块
Spring框架是一个全面的Java企业级应用开发框架,其核心容器模块为其他模块提供基础支持,包括Beans、Core、Context和SpEL四大子模块;数据访问及集成模块支持数据库操作,涵盖JDBC、ORM、OXM、JMS和Transactions;Web模块则专注于Web应用,提供Servlet、WebSocket等功能;此外,还包括AOP、Aspects、Instrumentation、Messaging和Test等辅助模块,共同构建强大的企业级应用解决方案。
59 2