【修真院java小课堂】Spring中的IOC是什么意思,为什么要用IOC而不是New来创建实例?

 SpringIOC简单介绍

                           

            Java小课堂

           分享人:方广辉


           1.背景介绍

           2.知识剖析

           3.常见问题

           4.扩展思考

           5.编码实战

           6.参考文献

           7.更多讨论

       

       

1.      背景介绍

软件系统中的对象就像齿轮一样,协同工作,但是互相耦合,一个零件不能正常工作,整个系统就崩溃了。这是一个强耦合的系统。齿轮组中齿轮之间的啮合关系,与软件系统中对象之间的耦合关系非常相似。对象之间的耦合关系是无法避免的,也是必要的,这是协同工作的基础。对象之间耦合度过高的系统,必然会出现牵一发而动全身的情形。

为了解决对象间耦合度过高的问题,软件专家MichaelMattson提出了IOC理论,用来实现对象之间的“解耦”。

       2.知识剖析

               

           基本概念

           读取配置文件

           设值注入

           构造注入

              

           IOC(Inversion of Control)即“控制反转”,是一种是面向对象编程中的一种设计原则,用来减低计算机代码之间的耦合度。其基本思想是:借助于“第三方”实现具有依赖关系的对象之间的解耦。

                              

           由于引进了中间位置的“第三方”,也就是IOC容器,使得A、B、C、D这4个对象没有了耦合关系,齿轮之间的传动全部依靠“第三方”了,全部对象的控制权全部上缴给“第三方”IOC容器。       

           软件系统在没有引入IOC容器之前,如图所示,对象A依赖于对象B,那么对象A在初始化或者运行到某一点的时候,自己必须主动去创建对象B或者使用已经创建的对象B。无论是创建还是使用对象B,控制权都在自己手上。
           软件系统在引入IOC容器之后,这种情形就完全改变了,如图所示,由于IOC容器的加入,对象A与对象B之间失去了直接联系,所以,当对象A运行到需要对象B的时候,IOC容器会主动创建一个对象B注入到对象A需要的地方。

           2.常见问题               

          什么是依赖注入?

          它们之间有什么关系?

      

           依赖注入(DI)就是将实例变量传入到一个对象中去

           如果 Class A 中,有Class B的实例,则称Class A和Class B就有一个依赖关系

           控制反转是一种思想

           依赖注入是一种设计模式

           IoC框架使用依赖注入作为实现控制反转的方式

                         

           依赖注入方式       

            1、setter方法

            2、构造器方法

            3、自动装配与注解注入

                    

           3.编码实战

           Bean创建及实例化

           依赖注入方式

                     

           4.扩展思考

           Bean的作用                 

Singleton作用域

   Bean的作用域是指spring容器创建Bean后的生存周期即由创建到销毁的整个过程。之前我们所创建的所有Bean其作用域都是Singleton,这是Spring默认的,在这样的作用域下,

每一个Bean的实例只会被创建一次,而且Spring容器在整个应用程序生存期中都可以使用该实例。因此之前的代码中spring容器创建Bean后,通过代码获取的bean,无论多少次,都是同一个Bean的实例。

    prototype作用域   它代表每次获取Bean实例时都会新创建一个实例对象,类似new操作符。

    request作用域    关于request作用域,对于每次HTTP请求到达应用程序,Spring容器会创建一个全新的

Request作用域的bean实例,且该bean实例仅在当前HTTPrequest内有效,整个请求过程也只会使用相同的bean实例,因此我们可以根据需要放心的更改所建实例的内部状态,而其他请求HTTP请求则创建新bean的实例互不干扰,当处理请求结束,request作用域的bean实例将被销毁。  

Session作用域     每当创建一个新的HTTP Session时就会创建一个Session作用域的Bean,并该实例bean伴随着会话的存在而存在。

     6.参考文献

                            百度,博客                      

     

     .更多讨论

           今天的分享就到这里啦,欢迎大家提问和探讨!

@Autowired和@Resources的区别是什么?

@Autowired默认按类型查找bean,用名字查找需要配合@Qualifier使用

@Resources有两种查找方式byname,bytype.默认byname,如果没有匹配name,按照bytype查找

@Resources(name="")仅通过name查找


DI注入有哪些方式啊

setter

构造器

自动装配

注解注入


静态的和简单工厂方法有什么区别

简单工厂模式的工厂类一般是使用静态方法,通过接收的参数的不同来返回不同的对象实例。

不修改代码的话,是无法扩展的。

工厂方法

工厂方法是针对每一种产品提供一个工厂类。通过不同的工厂实例来创建不同的产品实例。

在同一等级结构中,支持增加任意产品。


猜你喜欢

转载自blog.csdn.net/qq_40747710/article/details/80499942