您现在的位置是:首页 > 编程 > 

【Spring】001

2025-07-26 16:30:44
【Spring】001 一、Spring概述1、简介Spring:春天 —>给软件行业带来了春天;2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架(面向21世纪的框架);2004年月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版;很难想象Rod Johnson的学历 , 他是悉尼大学的博士,然而他的专业

【Spring】001

一、Spring概述

1、简介

Spring:春天 —>给软件行业带来了春天;

2002年,Rod Jahnson首次推出了Spring框架雏形interface21框架(面向21世纪的框架);

2004年月24日,Spring框架以interface21框架为基础,经过重新设计,发布了1.0正式版;

很难想象Rod Johnson的学历 , 他是悉尼大学的博士,然而他的专业不是计算机,而是音乐学;

Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架;

2、Spring理念

使现有技术更加实用,本身就是一个大杂烩,整合现有的框架技术;

/

4、官方下载地址

/

5、GitHub地址

6、Maven地址

(mvc包括了很多)

代码语言:javascript代码运行次数:0运行复制
<!-- .springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>
<!-- .springframework/spring-jdbc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>

7、Spring的优点

Spring是一个开源免费的框架 , 容器;

Spring是一个轻量级的框架 , 非侵入式的;

控制反转 IOC , 面向切面 AOP;

对事务的支持 , 对框架的支持;

8、Spring的体系结构

9、Spring 7大组件

参考链接:/

组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:

核心容器:

核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。

Spring Context:

Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JDI、EJB、、国际化、校验和调度功能;

Spring AOP:

通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能 , 集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理任何支持 AOP的对象。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中;

Spring DAO:

JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构;

Spring ORM:

Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构;

Spring Web 模块:

Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作;

Spring MVC 框架:

MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI;

10、扩展

Spring弊端:

由于Spring发展年代太长,违背了原来的理念,配置十分繁琐,人称“配置地狱!”;

直到有了Spring Boot;

Spring Boot:

Spring Boot是构建Spring应用程序的起点,旨在以最少的Spring前期配置使得项目能够尽快启动和运行;

Spring Boot与Spring Cloud:

Spring Boot 是 Spring 的一套快速配置脚手架,可以基于Spring Boot 快速开发单个微服务; Spring Cloud是基于Spring Boot实现的; Spring Boot专注于快速、方便集成的单个微服务个体,Spring Cloud关注全局的服务治理框架; Spring Boot使用了约束优于配置的理念,很多集成方案已经帮你选择好了,能不配置就不配置 , Spring Cloud很大的一部分是基于Spring Boot来实现,Spring Boot可以离开Spring Cloud独立使用开发项目,但是Spring Cloud离不开Spring Boot,属于依赖的关系; SpringBoot在SpringClound中起到了承上启下的作用,如果你要学习SpringCloud必须要学习SpringBoot;

二、IOC理论推导

1、原来的方式写代码

第一步:先写一个IUserDao接口:
代码语言:javascript代码运行次数:0运行复制
package com.zibo.dao;

public interface IUserDao {
    void getUser();
}
第二步:写一个IUserDao接口的实现类UserDaoImpl类:
代码语言:javascript代码运行次数:0运行复制
package com.zibo.dao.impl;

import com.zibo.dao.IUserDao;

public class UserDaoImpl implements IUserDao {
    public void getUser() {
        println("默认获取用户的数据!");
    }
}
第三步:写一个IUserService接口:
代码语言:javascript代码运行次数:0运行复制
package com.zibo.service;

public interface IUserService {
    void getUser();
}
第四步:写一个UserServiceImpl实现类:
代码语言:javascript代码运行次数:0运行复制
package com.zibo.service.impl;

import com.zibo.dao.IUserDao;
import com.zibo.dao.impl.UserDaoImpl;
import com.zibo.service.IUserService;

public class UserServiceImpl implements IUserService {

    private final IUserDao userDao = new UserDaoImpl();

    public void getUser() {
        userDao.getUser();
    }
}
第五步:写测试代码:
代码语言:javascript代码运行次数:0运行复制
package com.zibo;

import com.zibo.service.IUserService;
import com.zibo.service.impl.UserServiceImpl;

public class MyTest {
    public static void main(String[] args) {
        IUserService userService = new UserServiceImpl();
        userService.getUser();
    }
}
运行结果:
代码语言:javascript代码运行次数:0运行复制
默认获取用户的数据!
文件位置图:

2、试问

假如我们在UserServiceImpl类中需要用到另一个XXXDaoImpl,此时我们就需要修改

代码语言:javascript代码运行次数:0运行复制
private final IUserDao userDao = new UserDaoImpl();

代码语言:javascript代码运行次数:0运行复制
private final IUserDao userDao = new XXXDaoImpl();

在简单的程序中,修改简单,但在复杂的程序中需要修改很多地方,这就导致非常麻烦;

、我们可以这么做

为UserServiceImpl类中的userDao写一个setter方法,在使用UserServiceImpl类的时候通过setter方法设置对用的XXXDaoImpl类即可;

UserServiceImpl类:
代码语言:javascript代码运行次数:0运行复制
package com.zibo.service.impl;

import com.zibo.dao.IUserDao;
import com.zibo.service.IUserService;

public class UserServiceImpl implements IUserService {

    private IUserDao userDao;
    
    //利用setter进行动态注入
    public void setUserDao(IUserDao userDao) {
        this.userDao = userDao;
    }

    public void getUser() {
        userDao.getUser();
    }
}
测试类:
代码语言:javascript代码运行次数:0运行复制
package com.zibo;

import com.zibo.dao.impl.UserDaoImpl;
import com.zibo.service.impl.UserServiceImpl;

public class MyTest {
    public static void main(String[] args) {
        UserServiceImpl userService = new UserServiceImpl();
        userService.setUserDao(new UserDaoImpl());
        userService.getUser();
    }
}

4、这么一改,发生了革命性的变化

对于UserServiceImpl类,之前程序的主动性在于自身,有自身控制实例化对象是哪个,但是当使用setter方法注入的之后,程序的主动性转移了出去,UserServiceImpl类只能被动接受实例化对象。

由主动控制对象的创建到只能被动接受传进来的对象,这就是叫做控制反转

由主动创建对象,到通过传参进行注入所依赖的对象,这就叫做依赖注入;

这就是IOC的原型!

5、IOC的本质

控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,也有人认为DI只是IoC的另一种说法。没有IoC的程序中 , 我们使用面向对象编程 , 对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方,个人认为所谓控制反转就是:获得依赖对象的方式反转了;

IoC是Spring框架的核心内容,使用多种方式完美的实现了IoC,可以使用XML配置,也可以使用注解,新版本的Spring也可以零配置实现IoC;

Spring容器在初始化时先读取配置文件,根据配置文件或元数据创建与组织对象存入容器中,程序使用时再从Ioc容器中取出需要的对象;

图示:

采用XML方式配置Bean的时候,Bean的定义信息是和实现分离的,而采用注解的方式可以把两者合为一体,Bean的定义信息直接以注解的形式定义在实现类中,从而达到了零配置的目的。

控制反转是一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。在Spring中实现控制反转的是IoC容器,其实现方法是依赖注入(Dependency Injection,DI)。

三、HelloSpring

1、引入Maven坐标

代码语言:javascript代码运行次数:0运行复制
<!-- .springframework/spring-webmvc -->
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-webmvc</artifactId>
    <version>5.2.0.RELEASE</version>
</dependency>
</dependencies>

2、编写Hello实体类

代码语言:javascript代码运行次数:0运行复制
package com.zibo.pojo;

public class Hello {
    private String name;

    public String getame() {
        return name;
    }

    public void setame(String name) {
         = name;
    }

    @Override
    public String toString() {
        return "Hello{" +
                "name='" + name + '\'' +
                '}';
    }
}

、编写配置文件applicationContext.xml

代码语言:javascript代码运行次数:0运行复制
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=";
       xmlns:xsi=";
       xsi:schemaLocation=" .xsd">

        <!--使用spring创建对象:
            我们之前要做的:
            类型 对象名 = new 类型();
            Hello hello = new Hello();
            此处:
            id = 对象名
            class = 类型
            property 相当于给对象中的属性设置值
            整体流程:
            调用无参构造创建对象,使用setter方法注入数据;
        -->
        <bean id="hello" class="com.zibo.pojo.Hello">
            <property name="name" value="Spring"/>
        </bean>
</beans>

4、编写测试类

代码语言:javascript代码运行次数:0运行复制
package com.zibo;

import com.zibo.pojo.Hello;
import org.ApplicationContext;
import org.support.ClassPathXmlApplicationContext;

public class MyTest {
    public static void main(String[] args) {
        //获取Spring上下文对象
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        //我们的对象交给Spring管理了,要使用直接取出即可
        Hello hello = context.getBean("hello", );
        println(hello.getame());
    }
}

5、测试结果

代码语言:javascript代码运行次数:0运行复制
Spring
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2025-01-06,如有侵权请联系 cloudcommunity@tencent 删除框架配置入门spring对象

#感谢您对电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格的认可,转载请说明来源于"电脑配置推荐网 - 最新i3 i5 i7组装电脑配置单推荐报价格

本文地址:http://www.dnpztj.cn/biancheng/1198646.html

相关标签:无
上传时间: 2025-07-23 12:22:08

上一篇:【Spring Boot】034

下一篇:【Spring Boot】033

留言与评论(共有 8 条评论)
本站网友 马军
25分钟前 发表
DI(依赖注入)是实现IoC的一种方法
本站网友 济宁美食
20分钟前 发表
从而达到了零配置的目的
本站网友 清创是什么意思
2分钟前 发表
对象的创建由程序自己控制
本站网友 jiushigan
28分钟前 发表
Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务
本站网友 远洋城房价
26分钟前 发表
很多集成方案已经帮你选择好了
本站网友 轻质隔墙板
3分钟前 发表
Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务
本站网友 loadimage
15分钟前 发表
校验和调度功能;Spring AOP:通过配置管理特性