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)来讲,需要进行大量的配制工作,比较繁琐,对于一些小的项目而言,客观上也可能加大一些工作成本。
    目录
    相关文章
    |
    前端开发 安全 Java
    Spring Boot 便利店销售系统项目分包设计解析
    本文深入解析了基于Spring Boot的便利店销售系统分包设计,通过清晰的分层架构(表现层、业务逻辑层、数据访问层等)和模块化设计,提升了代码的可维护性、复用性和扩展性。具体分包结构包括`controller`、`service`、`repository`、`entity`、`dto`、`config`和`util`等模块,职责分明,便于团队协作与功能迭代。该设计为复杂企业级应用开发提供了实践参考。
    605 0
    |
    10月前
    |
    XML Java 测试技术
    《深入理解Spring》:IoC容器核心原理与实战
    Spring IoC通过控制反转与依赖注入实现对象间的解耦,由容器统一管理Bean的生命周期与依赖关系。支持XML、注解和Java配置三种方式,结合作用域、条件化配置与循环依赖处理等机制,提升应用的可维护性与可测试性,是现代Java开发的核心基石。
    |
    监控 测试技术 开发者
    IDEA项目调试你都会用了么,快看看是否有你不知道的调试技巧
    在IntelliJ IDEA中,熟练运用调试工具可显著提升开发效率。通过设置断点、单步执行、变量监控等功能,快速定位问题并优化代码性能。此外,掌握多线程调试、异常处理及远程调试技巧也至关重要。为提高效率,建议合理使用条件断点、快捷键与日志监控,同时不断学习总结经验。若觉得有用,别忘了点赞收藏!
    IDEA项目调试你都会用了么,快看看是否有你不知道的调试技巧
    |
    IDE Java 开发工具
    【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
    IntelliJ IDEA创建Java项目的图文详细步骤,手把手带你创建Java项目
    2274 10
    【Java基础-环境搭建-创建项目】IntelliJ IDEA创建Java项目的详细步骤
    |
    Java 区块链 Maven
    关于引入maven项目后出现‘parent.relativePath’ of POM错误时的解决方法
    关于引入maven项目后出现‘parent.relativePath’ of POM错误时的解决方法
    856 3
    |
    Java 关系型数据库 数据库连接
    Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
    集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
    1114 2
    |
    前端开发 Java API
    酒店管理系统基于 JavaFX Spring Boot 和 React 经典项目重构实操
    本文介绍了基于现代技术栈的酒店管理系统开发方案,整合了JavaFX、Spring Boot和React三大技术框架。系统采用前后端分离架构,JavaFX构建桌面客户端,React开发Web管理界面,Spring Boot提供RESTful API后端服务。核心功能模块包括客房管理和客户预订流程,文中提供了JavaFX实现的客房管理界面代码示例和React开发的预订组件代码,展示了如何实现客房信息展示、添加修改操作以及在线预订功能。
    804 0
    |
    数据安全/隐私保护
    IntelliJ IDEA使用技巧:在一个项目中如何正确引用其他子模块。
    我希望这个解答可以帮助你,有了这些知识,你可以更好地使用IntelliJ IDEA并轻松处理项目中的子模块。
    1167 19
    |
    XML 人工智能 Java
    Spring IOC 到底是什么?
    IOC(控制反转)是一种设计思想,主要用于解耦代码,简化依赖管理。其核心是将对象的创建和管理交给容器处理,而非由程序直接硬编码实现。通过IOC,开发者无需手动new对象,而是由框架负责实例化、装配和管理依赖对象。常见应用如Spring框架中的BeanFactory和ApplicationContext,它们实现了依赖注入和动态管理功能,提升了代码的灵活性与可维护性。
    328 1
    |
    Java jenkins 应用服务中间件
    结合Jenkins与Tomcat,实施Maven项目的自动构建和部署流程。
    任何项目构建和部署的自动化流程,总离不开对各个环节精细把控与密切配合。涉及到源代码管理、构建工具、持续集成服务器以及最终的运行时环境的协调。通过上述简洁实用的步骤,可以实现Maven项目从源代码到运行状态的无缝过渡,进而提升软件开发的效率与质量。
    602 0

    推荐镜像

    更多