Spring如何实现IoC( IDEA创建一个maven项目实现IoC)

简介: IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序对象的创建控制权由程序转移到外部,这种思想我们叫控制反转你不需要自己去new对象,交给它来new,达到解耦把你IoC容器里的Bean有关联的给它关联起来,就叫DI思想以下代码举例,当BookDao的实现类升级了,出现了BookDaolmpl2,那业务实现中的new对象也需要改动,这样耦合度就很高。业务层实现数据层实现 Spring提供了一个容器,我们称它为IoC容器,他用来充当IoC思想的

目录

前言

IoC控制反转/DI

Spring实现IoC思想

IoC实现


前言

IoC不是一种技术,只是一种思想,一个重要的面向对象编程的法则,它能指导我们如何设计出松耦合、更优良的程序


IoC控制反转/DI

对象的创建控制权由程序转移到外部,这种思想我们叫控制反转

把你IoC容器里的Bean有关联的给它关联起来,就叫DI思想

你不需要自己去new对象,交给它来new,引入IOC容器,利用依赖关系注入(DI)的方式,实现对象之间的解耦

以下代码举例,当BookDao的实现类升级了,出现了BookDaolmpl2,那业务实现中的new对象也需要改动,这样耦合度就很高。

业务层实现

public class BookSericelmpl implements BookService {
    private BookDao bookDao = new BookDaolmpl();
    public void save(){
        System.out.println("book service save.... ");
        bookDao.save();
    }
}

image.gif

数据层实现

public class BookDaolmpl implements BookDao {
    public void save(){
        System.out.println("book dao save....");
    }
}

image.gif

Spring实现IoC思想

Spring提供了一个容器,我们称它为IoC容器,他用来充当IoC思想的“外部”

IoC容器负责创建、初始化这些对象,那么这些被创建的对象我们统称为Bean

IoC实现

首先创建一个maven项目

image.gif

在pom.xml的<dependencies> </dependencies>中写入相关依赖

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>5.2.1.RELEASE</version>
    </dependency>

image.gif

在resources文件夹下创建.xml文件        

配置bean         id表示给bean起的名字    class表示给bean定义的类型

image.gif

先运行我们的app方法  用的是原始的new一个对象的方法

输出

book service save....

book dao save....image.gif

新建一个app2

先获取容器  然后根据我们前面设置的id读取bean  再将数据类型强转一下

运行 可以看见输出的内容是一致的

image.gif

但是会发现我们的Bookservice实现类中还存在new的方式创建对象,所以我们现在还没有实现完全解耦。

image.gif

现在要做的就是删除业务层中使用new方法创建的对象,然后给他提供一个set方法        

image.gif

然后去resources下的.xml文件配置service和dao关系

<bean id="bookDao" class="com.itheima.dao.impl.BookDaolmpl"/>
    <bean id="bookService" class="com.itheima.service.impl.BookSericelmpl">
        <!--配置service和doo的关系
        property表示配置当前bean的属性
        name表示具体配置哪个具体属性
        ref表示参照哪一个bean-->
        <property name="bookDao" ref="bookDao"/>
    </bean>

image.gif

要注意的是这里name和ref的bookDao是有区别的

ref的bookDao是指向我们上面配置的bean的id,也就是这一句

<bean id="bookDao" class="com.itheima.dao.impl.BookDaolmpl"/>

image.gif

name中的bookDao是我们前面提供的set bookDao方法的形参名

如图写完后我们app2中刚刚写的set方法已经有一个用法了,点击一下

image.gif

image.gif

我们再来运行一下app2,输出的结果还是一样,而我们所有的方法都舍弃了通过new方法创建对象,此时已经实现充分解耦image.gif

使用IOC框架产品能够给我们的开发过程带来很大的好处,但是也要充分认识引入IOC框架的缺点

    1. 软件系统中由于引入了第三方IOC容器,生成对象的步骤变得有些复杂,本来是两者之间的事情,又凭空多出一道手续,所以,引入了一个全新的框架,会增加团队成员学习和认识的培训成本。
    2. 由于IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗。如果要追求运行效率的话,就必须对此进行权衡。
    3. 具体到IOC框架产品(比如:Spring)来讲,需要进行大量的配制工作,比较繁琐,对于一些小的项目而言,客观上也可能加大一些工作成本。
    目录
    相关文章
    |
    10天前
    |
    Java Maven
    maven项目的pom.xml文件常用标签使用介绍
    第四届人文,智慧教育与服务管理国际学术会议(HWESM 2025) 2025 4th International Conference on Humanities, Wisdom Education and Service Management
    62 8
    |
    7天前
    |
    存储 运维 安全
    Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
    通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
    18 2
    |
    8天前
    |
    Java 应用服务中间件 Maven
    Maven的三种项目打包方式——pom,jar,war的区别
    Maven 提供了多种打包方式,分别适用于不同类型的项目。pom 用于父项目或聚合项目,便于项目的结构和依赖管理;jar 用于Java类库或可执行的Java应用程序;war 则专用于Java Web应用程序的部署。理解这些打包方式的用途和特点,可以帮助开发者更好地配置和管理Maven项目,确保构建和部署过程的顺利进行。无论是单模块项目还是多模块项目,选择合适的打包方式对于项目的成功至关重要。
    20 3
    |
    1月前
    |
    设计模式 前端开发 Java
    Spring MVC——项目创建和建立请求连接
    MVC是一种软件架构设计模式,将应用分为模型、视图和控制器三部分。Spring MVC是基于MVC模式的Web框架,通过`@RequestMapping`等注解实现URL路由映射,支持GET和POST请求,并可传递参数。创建Spring MVC项目与Spring Boot类似,使用`@RestController`注解标记控制器类。
    34 1
    Spring MVC——项目创建和建立请求连接
    |
    1月前
    |
    Java 关系型数据库 MySQL
    Maven——创建 Spring Boot项目
    Maven 是一个项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,简化了项目的构建和管理过程。其核心功能包括项目构建和依赖管理,支持创建、编译、测试、打包和发布项目。Maven 仓库分为本地仓库和远程仓库,远程仓库包括中央仓库、私服和其他公共库。此外,文档还介绍了如何创建第一个 SpringBoot 项目并实现简单的 HTTP 请求响应。
    117 1
    Maven——创建 Spring Boot项目
    |
    1月前
    |
    Java 关系型数据库 MySQL
    如何使用 maven 创建一个 Spring Boot项目
    Maven 是一个强大的项目管理工具,通过配置 `pom.xml` 文件自动获取所需的 jar 包,提高开发效率。其核心功能包括项目构建和依赖管理。项目构建支持编译、测试、打包和发布等流程,而依赖管理则通过中央仓库、本地仓库和私有服务器获取和管理项目依赖。示例中展示了如何创建第一个 SpringBoot 项目并实现简单接口。
    25 1
    如何使用 maven 创建一个 Spring Boot项目
    |
    20天前
    |
    XML 缓存 Java
    搞透 IOC、Spring IOC ,看这篇就够了!
    本文详细解析了Spring框架的核心内容——IOC(控制反转)及其依赖注入(DI)的实现原理,帮助读者理解如何通过IOC实现组件解耦,提高程序的灵活性和可维护性。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
    |
    23天前
    |
    缓存 IDE Java
    idea的maven项目打包时没有source下的文件
    【10月更文挑战第21天】idea的maven项目打包时没有source下的文件
    36 1
    |
    24天前
    |
    Java API Apache
    除了 Maven,还有哪些工具可以管理项目的依赖和版本冲突
    除了Maven,常用的项目依赖管理和版本冲突解决工具有Gradle、Ivy、Ant+Ivy、SBT等。这些工具各有特点,适用于不同的开发环境和需求。
    |
    12天前
    |
    安全 Java 测试技术
    Java开发必读,谈谈对Spring IOC与AOP的理解
    Spring的IOC和AOP机制通过依赖注入和横切关注点的分离,大大提高了代码的模块化和可维护性。IOC使得对象的创建和管理变得灵活可控,降低了对象之间的耦合度;AOP则通过动态代理机制实现了横切关注点的集中管理,减少了重复代码。理解和掌握这两个核心概念,是高效使用Spring框架的关键。希望本文对你深入理解Spring的IOC和AOP有所帮助。
    25 0

    推荐镜像

    更多