一般EJB都是两个类耦合度较高的,原因是一个类强烈依赖于另一个类。如下在一本书中看见的代码形式:

首先不用管这个类是干嘛的,主要用来展示一下为啥它耦合度高。
当前这个类,有一个private权限的类属性,这个属性的赋值,是直接在其构造方法中new一个其具体类的对象。如果这个类属性的对象代码有问题,那么当前这个类也有问题,当前类的自己的方法也无法使用。一荣俱荣,一败具败。
怎么松耦合?

这里的属性,依然是那个类的属性,只是原本那个具体的类继承了自己的接口,这里写的是接口属性。
好处是什么?在给它这个属性赋值的时候,构造方法的参数可以是接口,外界可以传递这个接口的任何一个具体类进来赋值给这个属性。
外界的这个接口实现了多态属性,且当正在使用的具体类出现bug时,可以迅速换成备用类然后排这个具体类的bug,并且外界的类出现bug,当前类自己的方法可以正常使用。
原本要传递一个对象给当前这个类的构造方法,然后构造方法将传递进来的值赋值给当前类的接口属性。
这个传递的对象是我们自己在主类或者啥测试类自己创建来着的,但是一般系统比较复杂,不一定这两个类就是单独的完成任务就算成为一个系统的,或许是很多这样的组合然后组成一个系统,那么要写很多的第三个类来创建对象丢给另一个类的构造方法然后赋值然后调用方法吗?
于是Spring出来做这样的一系列操作,由我们做少量配置,然后它来完成接口或类属性的创建对象操作,然后需要对象的类(也就是属性是别的类的类型或者接口)所需要的属性值就由Spring根据配置找到创建好的对象,然后丢给当前类构造方法进行赋值。
个人理解,欢迎指正和讨论。