笔记 笔记
首页
  • 开发工具
  • Java Web
  • Java 进阶
  • 容器化技术
  • Java 专栏

    • Java 核心技术面试精讲
    • Java 业务开发常见错误 100 例
  • 数据库专栏

    • MySQL 实战 45 讲
    • Redis 核心技术与实战
  • 安全专栏

    • OAuth 2.0 实战课
  • 计算机系统
  • 程序设计语言
  • 数据结构
  • 知识产权
  • 数据库
  • 面向对象
  • UML
  • 设计模式
  • 操作系统
  • 结构化开发
  • 软件工程
  • 计算机网络
  • 上午题错题
在线工具 (opens new window)

EasT-Duan

Java 开发
首页
  • 开发工具
  • Java Web
  • Java 进阶
  • 容器化技术
  • Java 专栏

    • Java 核心技术面试精讲
    • Java 业务开发常见错误 100 例
  • 数据库专栏

    • MySQL 实战 45 讲
    • Redis 核心技术与实战
  • 安全专栏

    • OAuth 2.0 实战课
  • 计算机系统
  • 程序设计语言
  • 数据结构
  • 知识产权
  • 数据库
  • 面向对象
  • UML
  • 设计模式
  • 操作系统
  • 结构化开发
  • 软件工程
  • 计算机网络
  • 上午题错题
在线工具 (opens new window)

购买兑换码请添加

添加时候请写好备注,否则无法通过。

  • Maven

  • Bootstrap

  • Spring

    • Spring 概述
    • Spring 的入门
      • 什么是控制反转(IOC)
      • 什么是依赖注入(DI)
      • IOC 和 DI 有什么区别
      • 快速入门
        • 导入依赖
        • 传统方式
        • Spring 的方式
    • Spring 的工厂类
    • Spring 的 Bean
    • Spring 的依赖注入(DI)
    • 动态代理
    • Spring AOP
    • Spring 的事务管理
  • Spring MVC

  • MyBatis

  • JUnit

  • GitFlow 工作流指南

  • SpringBoot

  • Reactor

  • 微服务

  • Java Web
  • Spring
EasT-Duan
2023-04-28
目录

Spring 的入门

欢迎来到我的 ChatGPT 中转站,极具性价比,为付费不方便的朋友提供便利,有需求的可以添加左侧 QQ 二维码,另外,邀请新用户能获取余额哦!最后说一句,那啥:请自觉遵守《生成式人工智能服务管理暂行办法》。

# Spring 的入门

# 什么是控制反转(IOC)

控制反转:是一个理论,概念,思想。把对象的创建,赋值,管理工作都交给代码之外的容器实现,也就是对象的创建是有其它外部资源完成,这样做实现了与解耦合。

  • 正转:对象的创建、赋值等操作交由程序员手动完成,即使用类似 new Xxx (Xxx Xxx)、Xxx.setXxx () 语句完成对象的创建与赋值,缺点是一旦程序功能发生改变,涉及到的类就要修改代理,耦合度高,不便于维护和管理。
  • 反转:对象的创建、赋值等操作交由代码之外的容器实现,有容器代替程序员完成对象的创建、赋值;且当程序功能发生变化时,只需要修改容器的配置文件即可。

提示

java 实现创建对象的方式有哪些

  • 构造方法:new student ()

  • 反射

  • 序列化

  • 动态代理

  • 容器:tomcat 容器、ioc 容器

# 什么是依赖注入(DI)

依赖注入:一种实现控制反转(Inversion of Control,IOC)的具体技术手段,用于解决对象之间的依赖关系。

# IOC 和 DI 有什么区别

IOC(Inversion of Control,控制反转)和 DI(Dependency Injection,依赖注入)是相关但不完全相同的概念。

IOC 是一种软件设计原则,它指的是将对象的创建和依赖关系的管理转移到容器中。在传统的编程模型中,对象通常会自己创建和管理其所依赖的其他对象,而在 IOC 中,对象不再负责自己的依赖对象的创建和管理,而是由外部的容器来负责。IOC 反转了对象的控制权。

DI 是 IOC 的一种具体实现方式,它是通过将依赖对象传递给对象的方式来实现控制反转。DI 通过构造函数注入、Setter 方法注入或接口注入等方式,将依赖对象注入到对象中。DI 可以看作是 IOC 的具体技术手段。

因此,可以说 DI 是实现 IOC 的一种具体方法,而 IOC 是一种更广义的概念。IOC 强调的是对象控制权的反转,而 DI 则强调的是通过注入依赖对象来实现控制反转。

在 Spring 框架中,IOC 是整个框架的核心思想,而 DI 是 Spring 实现 IOC 的具体方式。Spring 使用依赖注入来实现控制反转,通过配置文件或注解将对象之间的依赖关系声明出来,由 Spring 容器负责创建对象并注入依赖,使得对象之间的耦合度降低,代码更具扩展性和可维护性。

# 快速入门

# 导入依赖

这里只是演示 Spring 创建对象的方式。

入门 Spring 只需要引入核心依赖即可

<!-- 这里提供一个pom依赖-->
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>hello-spring</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.17.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.17.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.3.17.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.3.17.RELEASE</version>
        </dependency>
    </dependencies>
</project>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

# 传统方式

  • 如果的程序的底层实现改变了,如果不修改程序的源代码,而实现呢?

# Spring 的方式

  1. 创建一个 Maven 项目,并导入上面提供的依赖
  2. 在 resources 文件夹中创建 applicationContext.xml ,创建 Car 类
  3. 编写测试类
<?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">

    <!--
        声明bean(告诉spring要创建某个类的对象)
        1、id:自定义名称,唯一值,spring通过该id的属性值找到对象
        2、class:要创建类的全限定类名
        3、下述的声明语句在spring底层类似与执行了以下代码:UserServiceImpl service = new UserServiceImpl();
        4、一个bean标签声明一个java对象
        5、spring容器根据bean标签创建对象,尽管存在class属性相同的bean标签,只要是id值不同,spring容器就会创建该class的对象
    -->
   <bean id="setCar" class="org.example.hello.spring.pojo.Car">
        <property name="name" value="领克"></property>
        <property name="price" value="29999.9"></property>
	</bean>

    <!--
        spring容器也可以创建非自定义类的对象,例如java.lang.String类的对象,只要指定了
        class属性,spring容器就可以创建该类的对象
    -->
    <bean id="myString" class="java.lang.String"/>
</beans>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
@ToString
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Car {
    private String name;
    private Double price;
    public String carInfo() {
        return name + ":" + price;
    }
}
1
2
3
4
5
6
7
8
9
10
11
public class AppTest
{
    //使用spring容器创建对象
    @Test
    public void test01() {
        //1、指定spring配置文件的名称
        String config = "applicationContext.xml";
        //2、创建表示spring容器的对象 ApplicationContext
        //ClassPathXmlApplicationContext:表示从类路径中加载spring配置文件
        ApplicationContext ac = new ClassPathXmlApplicationContext(config);
        //3、从容器中获取对象
        Car car = (Car)ac.getBean("userService");
        //4、调用方法
        String info = car.carInfo();
        System.out.println(info);
    }
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#Spring
上次更新: 2025/04/12, 05:37:39
Spring 概述
Spring 的工厂类

← Spring 概述 Spring 的工厂类→

最近更新
01
Reactor 核心
02-24
02
前置条件
10-30
03
计算机网络
09-13
更多文章>
Theme by Vdoing | Copyright © 2019-2025 powered by Vdoing
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式