Spring如何实现IoC( IDEA创建一个maven项目实现IoC)
  TEZNKK3IfmPf 24天前 18 0

 

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();
    }

}

数据层实现 

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

}

Spring实现IoC思想

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

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

 IoC实现

首先创建一个maven项目

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

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

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

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

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

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

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

输出

book service save.... 

book dao save....

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

新建一个app2

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

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

 

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

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

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

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

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

 然后去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>

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

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

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

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

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

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

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

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

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

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

  1. 软件系统中由于引入了第三方IOC容器,生成对象的步骤变得有些复杂,本来是两者之间的事情,又凭空多出一道手续,所以,引入了一个全新的框架,会增加团队成员学习和认识的培训成本。
  2. 由于IOC容器生成对象是通过反射方式,在运行效率上有一定的损耗。如果要追求运行效率的话,就必须对此进行权衡。
  3. 具体到IOC框架产品(比如:Spring)来讲,需要进行大量的配制工作,比较繁琐,对于一些小的项目而言,客观上也可能加大一些工作成本。
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 24天前 0

暂无评论

推荐阅读
TEZNKK3IfmPf