什么是IOC以及依赖注入?

约定不等于承诺〃 2022-03-10 12:48 388阅读 0赞

以下文字从某论坛粘贴而来:

  • 楼主:Spring 是干什么的? 能具体举出一个例子吗?比如,写一个 留言板程序,会用到 Spring 吗?
  • 热心网友1:你接触 Java 13年了就只懂 if 、else 、for 这3个语句?!你怎么做到的?!
  • 楼主:因为所开发的网站(貌似不管多复杂的网站 都是 if 和 for ),都是 数据库的 增删改,按照 2000年的 ASP、PHP 语言 和 VB语言的思路写就完成了,从来没有用 Spring 的 IOC,也许项目中有 Spring 的框架,但是也没有 修改过吧。
  • 热心网友1:隐隐约约感觉楼主是来黑spring的…
    楼主不要纠结spring是做什么的了
    spring能做的事情,你用java都能做.
    over
  • 热心网友2好比如你有两个类:

    class A {
    private B b = new B();
    }
    class B {
    public void sayHello(){
    System.out.println(“hello”);
    }
    }

这是传统的实现,A类中要调用B类的方法,必须有B的实例,所以A里面就创建了一个B的实例
下面说一下ioc是什么:
如果用ioc 依赖注入的思维来想这个,那么A类是依赖与B类的,因为这个地方没有了B类,new B将会不成立,虽然有了依赖注入,这个地方也会不成立,所以和ioc一起使用的就是接口:

  1. class A {
  2. private IB b;
  3. }
  4. interface IB{
  5. public void sayHello();
  6. }
  7. class B implements IB{
  8. public void sayHello(){
  9. System.out.println("hello");
  10. }
  11. }

现在这样A类就不依赖与B类了,而是依赖与IB接口,现在要做的就是,把B的实例注入到A的b属性中
spring ioc在这段代码中的作用就是创建B实例,然后在创建A实例的时候将B的实例设置到A的属性b之中.
注意,这里的B实例,A实例并不是类似与上面那样我们手动new一个,而是通过spring 的BeanFactory创建的.

  • 热心网友3:楼主真是纯为黑spring而来的啊。
  • 热心网友4:就我感觉spring是java界的“胶水”。提供了很多非常好用的工具方法,让各种第三方包可以和谐相处
    AOP还是很好用,各类语言也都有类似的实现。Spring的AOP实现算是Java里面做的比较好的。
    至于IoC…我感觉这完全是Java世对构架走火入魔的产物。除非构架确实够复杂,不然大多情况下是完全没必要去做IoC的。很多时候所谓的可复用完全是臆想出来的,凭空把事情搞复杂了。
    不过IoC的滥用也不能归结给spring。Java就喜欢讲构架。在spring出现前,很多人还在用更丑陋的方式实现类似的功能。
    Spring 是块万用插线板。所有的零件通过 Spring 统一管理,可做到根据需要随时替换。你的组件所需要的零件,原本是在类内部自己创建,现在都由 Spring 来装配。组件需要 Spring “注入”所“依赖”的零件,把装配的权利交给外部的 Spring,也就是“依赖注入”,也叫“控制反转”。

发表评论

表情:
评论列表 (有 0 条评论,388人围观)

还没有评论,来说两句吧...

相关阅读

    相关 什么依赖注入Ioc容器了

    背景 在很多编程语言(例如java)开发中,程序员在某个类中需要依赖其它类的方法,则通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理,

    相关 依赖注入1-IoC

    ASP.NET Core在启动以及后续针对每个请求的处理过程中的各个环节都需要相应的组件提供相应的服务,为了方便对这些组件进行定制,ASP.NET通过定义接口的方式对它们进行了