java之路—— Spring IOC 的详解与基本应用

简介: java之路—— Spring IOC 的详解与基本应用

b94a3d3ebe5f4d1b881308c4ced512ae.jpg


前言


首先在了解ioc之前,我们要先了解Spring的基本概念。

Spring是一个开源的Java应用程序开发框架,它提供了一套全面的解决方案,用于开发企业级应用程序和Java EE应用程序。Spring框架的目标是简化Java应用程序的开发,并提高代码的可维护性和扩展性。

Spring框架提供了许多功能和模块,包括:


IOC容器: Spring的IOC容器可以管理应用程序中的对象,并负责对象之间的依赖注入。它减少了代码中的硬编码依赖关系,使得对象之间的耦合度降低,便于测试和维护。


AOP支持: 通过Spring的AOP(Aspect-Oriented Programming)模块,可以实现横切关注点的分离和集中处理。例如,可以通过AOP实现日志记录、事务管理和安全性等通用功能,而不需要在业务逻辑中显式编写相关代码。


数据访问: Spring提供了对各种数据访问技术的支持,包括JDBC、ORM(对象关系映射)框架(如Hibernate、MyBatis)、NoSQL数据库(如MongoDB)等。这使得开发者可以更方便地与各种数据源进行交互。


集成: Spring框架还提供了对各种企业级应用程序集成技术的支持,包括JMS(Java消息服务)、JMX(Java管理扩展)、邮件发送、任务调度等。


测试支持: Spring框架提供了测试支持模块,帮助开发者编写单元测试和集成测试,并提供对自动化测试的支持。


总之,Spring框架是一个功能强大且灵活的框架,它可以帮助开发者更轻松地构建高质量、可维护和可扩展的Java应用程序。


一、IOC 基本概念


IOC(控制反转)是Spring框架的核心概念之一。它是一种设计原则和软件开发模式,用于管理对象之间的依赖关系。


传统的程序开发中,对象之间的创建和依赖关系由开发者自己控制和管理。而在IOC中,控制权被反转了,即由容器来管理对象的生命周期和依赖关系。

在IOC中,容器负责创建、组装和管理对象,并按需将对象提供给其他对象使用。开发者不需要显式地创建对象,而是通过配置将对象的创建和依赖注入的细节交给IOC容器来处理。

56ba8aa316884071a600798d5e2634d9.jpg


二、理解IOC


其中IOC(控制反转)就是把创建和管理 bean 的过程转移给了第三方,而这个第三方,就是 Spring IoC Container,对于 IoC 来说,最重要的就是容器。


例如:现有类 A 依赖于类 B


传统的开发方式 : 往往是在类 A 中手动通过 new 关键字来 new 一个 B 的对象出来

IoC 思想开发方式 : 不通过 new 关键字来创建对象,而是通过 IoC 容器(Spring 框架) 来帮助我们实例化对象。我们需要哪个对象,直接从 IoC 容器里面去取即可。

从以上两种开发方式的对比来看:我们 “丧失了一个权力” (创建、管理对象的权力),从而也得到了一个好处(不用再考虑对象的创建、管理等一系列的事情)


可以将Spring IOC简单地理解为“容器自动帮我们管理对象”。


假设你需要在一个Java应用程序中创建多个对象,并且这些对象之间存在依赖关系。传统的方式是你手动进行对象的创建和依赖注入,代码会比较繁琐并且难以维护。

而使用Spring IOC,你只需要通过配置文件或注解来描述这些对象及它们之间的依赖关系,Spring框架会帮你完成对象的创建和依赖注入的工作。这样你就能够专注于业务逻辑的编写,而不需要关心对象的具体实例化过程和对象之间的相互关系。


具体来说,假设有以下两个类:

public class UserService {
    private UserDao userDao;
    // 依赖注入
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public void add(String username, String password) {
        // 调用依赖的UserDao类的方法
        userDao.save(username, password);
    }
}
public class UserDao {
    public void save(String username, String password) {
        // 实现保存用户数据的逻辑
    }
}


使用Spring IOC,我们可以通过配置文件(例如XML配置)来描述对象之间的依赖关系:

<!-- applicationContext.xml -->
<bean id="userService" class="com.example.UserService">
    <property name="userDao" ref="userDao"/>
</bean>
<bean id="userDao" class="com.example.UserDao"/>


上述配置中,我们定义了一个名为userService的UserService对象,并将其依赖的UserDao对象通过属性注入方式关联起来。


当应用程序启动时,Spring IOC容器会读取配置文件,并自动创建UserService和UserDao的实例,并将UserDao对象注入到UserService中。这样,我们就可以直接使用userService对象进行业务操作,而无需手动创建对象和处理对象之间的依赖关系。

// 应用程序代码
public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
    // 从IOC容器中获取userService对象
    UserService userService = context.getBean("userService", UserService.class);
    // 调用userService对象的方法
    userService.add("username", "password");
}


三、基本步骤


下面是Spring IOC的基本应用及相应的代码说明:

引入Spring依赖

首先,在你的项目中引入Spring的相关依赖。可以使用Maven或Gradle等构建工具,在项目的配置文件中添加相应的依赖项。

创建实体类

编写需要被Spring IOC容器管理的实体类。例如,创建一个名为User的简单Java类:

public class User {
    private String name;
    // 省略构造方法和其他方法
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
}片


配置Spring IOC容器

创建一个配置文件(如XML配置文件),用于描述对象的创建和依赖关系。以下示例以XML方式配置:

/**
   xml 配置
*/
<!-- applicationContext.xml -->
<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 id="user" class="com.example.User">
        <property name="name" value="John Doe"/>
    </bean>
</beans>片


上述配置文件定义了一个id为user的User对象,并设置了其name属性的初始值为"John Doe"。

使用Spring IOC容器获取对象

在应用程序中,通过Spring IOC容器获取配置好的对象,并使用它们。以下是一个示例代码:

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
    public static void main(String[] args) {
        // 创建Spring IOC容器
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        // 从IOC容器中获取对象
        User user = context.getBean("user", User.class);
        // 使用对象
        System.out.println("User name: " + user.getName());
    }
}

上述代码中,我们创建了一个Spring IOC容器(ApplicationContext),并指定了前面创建的配置文件。然后,通过getBean方法从容器中获取id为user的User对象,并使用它的getName方法打印出用户的名字。


执行以上代码,输出结果将会是:“User name: John Doe”。


通过以上步骤,我们成功应用了Spring IOC,将对象的创建和依赖关系的管理交给了Spring框架,实现了解耦和灵活性。

除了XML配置方式外,Spring还提供了基于注解的配置方式(如使用@Component、@Autowired等),能够更便捷地进行对象的声明和依赖注入。

目录
相关文章
|
3天前
|
安全 Java 大数据
探索Java的奇妙世界:语言特性与实际应用
探索Java的奇妙世界:语言特性与实际应用
|
1天前
|
Java Spring 容器
【Spring系列笔记】IOC与DI
IoC 和 DI 是面向对象编程中的两个相关概念,它们主要用于解决程序中的依赖管理和解耦问题。 控制反转是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入和依赖查找。
9 2
|
1天前
|
设计模式 消息中间件 Java
Java 设计模式:探索发布-订阅模式的原理与应用
【4月更文挑战第27天】发布-订阅模式是一种消息传递范式,被广泛用于构建松散耦合的系统。在 Java 中,这种模式允许多个对象监听和响应感兴趣的事件。
8 2
|
1天前
|
设计模式 算法 Java
Java 设计模式:探索策略模式的概念和实战应用
【4月更文挑战第27天】策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在 Java 中,策略模式通过定义一系列的算法,并将每一个算法封装起来,并使它们可以互换,这样算法的变化不会影响到使用算法的客户。
6 1
|
1天前
|
Java
【专栏】Java中的反射机制与应用实例
【4月更文挑战第27天】本文探讨了Java反射机制,该机制允许程序在运行时获取类信息、动态创建对象、调用方法和访问属性。反射通过Class、Constructor、Method和Field类实现。文中列举了反射的应用场景,如动态创建对象、调用方法、访问属性和处理注解,并提供了相关实例代码演示。
|
1天前
|
Java 测试技术 数据库连接
Spring中ioc的优点
总之,Spring中的IoC提供了一种更加灵活、可维护、可测试和可扩展的方式来管理组件之间的依赖关系,从而提高了应用程序的质量和可维护性。这使得开发人员能够更专注于业务逻辑而不是底层的技术细节。
9 1
|
4天前
|
Java Nacos 开发者
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
Java从入门到精通:4.2.1学习新技术与框架——以Spring Boot和Spring Cloud Alibaba为例
|
4天前
|
Dubbo Java 应用服务中间件
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
Java从入门到精通:3.2.2分布式与并发编程——了解分布式系统的基本概念,学习使用Dubbo、Spring Cloud等分布式框架
|
SQL 存储 Java
Java 应用与数据库的关系| 学习笔记
快速学习 Java 应用与数据库的关系。
170 0
Java 应用与数据库的关系| 学习笔记
|
SQL 存储 Java
Java 应用与数据库的关系| 学习笔记
快速学习 Java 应用与数据库的关系。
165 0
Java 应用与数据库的关系| 学习笔记