Spring依赖注入的方式有几种,各是什么?
2 个回答
今朝有酒今朝醉,明日愁来明日愁。玄老### 依赖注入的方式及各自特点 #### 1. 构造器注入 将被依赖对象通过构造函数的参数注入给依赖对象,并且在初始化对象的时候注入。 **优点**: - 对象初始化完成后便可获得可使用的对象。 - 依赖关系是明确的,不会有未初始化的状态。 **缺点**: - 当需要注入的对象很多时,构造器参数列表将会很长。 - 不够灵活,如果有多种注入方式,每种方式都需要提供多个重载的构造函数,比较麻烦。 **示例代码**: ```java public class Service { private final Dependency dependency; public Service(Dependency dependency) { this.dependency = dependency; } } ``` #### 2. Setter方法注入 IoC容器通过调用对象的setter方法将被依赖对象注入给依赖类。 **优点**: - 灵活,可以选择性地注入需要的对象。 - 可以在对象创建后再进行注入,适合依赖关系可能发生变化的场景。 **缺点**: - 依赖对象初始化完成后由于尚未注入被依赖对象,因此还不能使用。 **示例代码**: ```java public class Service { private Dependency dependency; public void setDependency(Dependency dependency) { this.dependency = dependency; } } ``` #### 3. 接口注入 依赖类必须实现指定的接口,然后实现该接口中的一个方法,该方法用于依赖注入。该方法的参数是要注入的对象。 **优点**: - 接口注入中,接口的名字和方法的名字都不重要,只要保证方法的参数是要注入的对象类型即可。 **缺点**: - 侵入性强,不建议使用。 - 依赖类必须实现特定的接口,增加了类的耦合度。 **示例代码**: ```java public interface DependencyInjector { void injectDependency(Dependency dependency); } public class Service implements DependencyInjector { private Dependency dependency; @Override public void injectDependency(Dependency dependency) { this.dependency = dependency; } } ``` ### 总结 1. **构造器注入**: - **优点**:对象初始化完成后便可获得可使用的对象,依赖关系明确。 - **缺点**:构造器参数列表可能过长,不够灵活。 - **适用场景**:依赖关系固定且较少的场景。 2. **Setter方法注入**: - **优点**:灵活,可以选择性注入需要的对象,适合依赖关系可能发生变化的场景。 - **缺点**:对象初始化完成后不能立即使用,需要等到依赖注入完成。 - **适用场景**:需要动态注入依赖的场景。 3. **接口注入**: - **优点**:方法参数类型即为要注入的对象类型。 - **缺点**:侵入性强,不建议使用。 - **适用场景**:较少使用,通常不推荐。 依赖注入的选择应根据具体的应用场景来决定,通常构造器注入和Setter方法注入是最常用的方式。发布于 2023-03-08 23:46 •IP属地 辽宁举报评论收藏
疑是仙女下凡来,回眸一笑胜星华。瓶子先生一、构造器注入 将被依赖对象通过构造函数的参数注入给依赖对象,并且在初始化对象的时候注入。 优点: 对象初始化完成后便可获得可使用的对象。 缺点: 当需要注入的对象很多时,构造器参数列表将会很长; 不够灵活。若有多种注入方式,每种方式只需注入指定几个依赖,那么就需要提供多个重载的构造函数,麻烦。 二、setter方法注入 IoC Service Provider通过调用成员变量提供的setter函数将被依赖对象注入给依赖类。 优点: 灵活。可以选择性地注入需要的对象。 缺点: 依赖对象初始化完成后由于尚未注入被依赖对象,因此还不能使用。 三、接口注入 依赖类必须要实现指定的接口,然后实现该接口中的一个函数,该函数就是用于依赖注入。该函数的参 数就是要注入的对象。 优点: 接口注入中,接口的名字、函数的名字都不重要,只要保证函数的参数是要注入的对象类型即可。 缺点: 侵入行太强,不建议使用。 PS:什么是侵入性? 如果类A要使用别人提供的一个功能,若为了使用这功能,需要在自己的类中增加额外的代码,这就是侵入性。编辑于 2021-06-15 17:45 •IP属地 广东举报评论收藏
公众号进入网站体验更佳

