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

相关文章
|
19天前
|
安全 Java Ruby
我尝试了所有后端框架 — — 这就是为什么只有 Spring Boot 幸存下来
作者回顾后端开发历程,指出多数框架在生产环境中难堪重负。相比之下,Spring Boot凭借内置安全、稳定扩展、完善生态和企业级支持,成为构建高可用系统的首选,真正经受住了时间与规模的考验。
140 2
|
2月前
|
XML JSON Java
Spring框架中常见注解的使用规则与最佳实践
本文介绍了Spring框架中常见注解的使用规则与最佳实践,重点对比了URL参数与表单参数的区别,并详细说明了@RequestParam、@PathVariable、@RequestBody等注解的应用场景。同时通过表格和案例分析,帮助开发者正确选择参数绑定方式,避免常见误区,提升代码的可读性与安全性。
|
3月前
|
Java Spring
聊聊你对SpringBoot框架的理解 ?
SpringBoot是Spring家族中流行的子项目,旨在简化Spring框架开发的繁琐配置。它主要提供三大功能:starter起步依赖简化依赖管理,自动配置根据条件创建Bean,以及内嵌Web服务器支持Jar包运行,极大提升了开发效率。
144 0
|
8天前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
58 8
|
1月前
|
监控 Kubernetes Cloud Native
Spring Batch 批处理框架技术详解与实践指南
本文档全面介绍 Spring Batch 批处理框架的核心架构、关键组件和实际应用场景。作为 Spring 生态系统中专门处理大规模数据批处理的框架,Spring Batch 为企业级批处理作业提供了可靠的解决方案。本文将深入探讨其作业流程、组件模型、错误处理机制、性能优化策略以及与现代云原生环境的集成方式,帮助开发者构建高效、稳定的批处理系统。
231 1
|
3月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
419 1
|
2月前
|
Cloud Native Java API
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
Java Spring框架技术栈选和最新版本及发展史详解(截至2025年8月)-优雅草卓伊凡
368 0
|
3月前
|
NoSQL Java 数据库连接
SpringBoot框架
Spring Boot 是 Spring 家族中最流行的框架,旨在简化 Spring 应用的初始搭建与开发。它通过自动配置、起步依赖和内嵌服务器三大核心功能,大幅减少配置复杂度,提升开发效率。开发者可快速构建独立运行的 Web 应用,并支持多种数据访问技术和第三方集成。
|
3月前
|
缓存 安全 Java
第五章 Spring框架
Spring IOC(控制反转)通过工厂模式管理对象的创建与生命周期,DI(依赖注入)则让容器自动注入所需对象,降低耦合。常见注解如@Component、@Service用于声明Bean,@Autowired用于注入。Bean默认单例,作用域可通过@Scope配置,如prototype、request等。Spring通过三级缓存解决循环依赖问题,但构造函数循环依赖需用@Lazy延迟加载。AOP通过动态代理实现,用于日志、事务等公共逻辑。事务通过@Transactional实现,需注意异常处理及传播行为。
49 0

推荐镜像

更多