Spring IOC 注入方式

依赖注入通常有如下两种方式:

①设值注入:IOC容器使用属性的Setter方法来注入被依赖的实例。

设值注入是指IOC容器使用属性的Setter方法来注入被依赖的实例。这种注入方式简单、直观,因而在Spring的依赖注入里大量使用。

②构造注入:IOC容器使用构造器来注入被依赖的实例。

构造注入在构造实例时,已经为其完成了依赖关系的初始化。这种利用构造器来设置依赖关系的方式,被称之为构造注入。

Spring推荐面向接口编程,可以更好的让规范和实现分离,从而提供更好的解耦。

对于一个JAVAEE应用,不管是DAO组件,还是业务逻辑组件,都应该先定义一个接口,该接口定义组件应该实现的功能,但是功能的实现则由其实现类提供。

EX:

先定义2个接口:

两种注入方式的对比:

Spring同时支持两种依赖注入方式:设置注入和构造注入。两种注入方式,并没有绝对的好坏之分,只是适应的场景有所不同。

相比之下,设置注入具有如下优点:

1、 与传统的JavaBean的写法更相识,程序开发人员更容易理解、接受、通过setter方式设定依赖关系显得更加直观、自然。

2、 对于复杂的依赖关系,如果采用构造注入,会导致构造器过于臃肿,难以阅读。Spring在创建Bean实例时,需要同时实例化其依赖的全部实例,因而导致性能下降。而使用设置注入,则可以避免。

3、 尤其是在某些属性可选的情况下,多参数的构造器更加笨重。

当然,构造注入也不是绝对不如设值注入,某些特定的场合,构造更适合。构造也有如下优点:

1、 构造注入可以在构造器中决定依赖关系的注入顺序,优先依赖的优先注入,常常需要依赖于Datasource的注入。采用构造注入,可以在代码中清晰地决定注入顺序。

2、 对于依赖关系无须变化的Bean,构造注入更有用处。因为没有setter方法,所有的依赖关系全部在构造器中设定,因此,无须担心后续的代码对依赖关系产生破坏。

3、 依赖关系只能在构造器中设定,则只有组件的创建者才能改变组件的依赖关系。对组件的调用者而言,组件内部的依赖关系完全透明,更符合高内聚的原则。

建议采用以设值注入为主,构造注入为辅的注入策略。对于依赖关系无须变化的注入,尽量采用构造注入;而其他的依赖关系的注入,则考虑采用设值注入。

时间: 2024-10-25 04:27:46

Spring IOC 注入方式的相关文章

浅析 Spring IoC - 注入方式

1. IoC 容器的概念 IoC 容器指 具有依赖注入功能的容器,IoC 容器负责实例化.定位.配置应用程序中的对象及建立这些对象间的依赖.应用程序无需直接在代码中 new 相关对象,而是由 IoC 容器进行组装.在Spring 中 BeanFactory 是 IoC 容器的实际代表者. Spring IoC 容器通过读取配置文件中配置元数据,通过元数据对用中的各个对象进行实例化及装配.一般使用基于 xml 配置文件进行配置元数据,而且 spring 与 配置文件 完全解耦,可以使用其他方式进行

Spring 依赖注入方式详解

阅读目录 1.Set注入 2.构造器注入 3.静态工厂的方法注入 4.实例工厂的方法注入 平常的Java开发中,程序员在某个类中需要依赖其它类的方法. 通常是new一个依赖类再调用类实例的方法,这种开发存在的问题是new的类实例不好统一管理. Spring提出了依赖注入的思想,即依赖类不由程序员实例化,而是通过Spring容器帮我们new指定实例并且将实例注入到需要该对象的类中. 依赖注入的另一种说法是"控制反转".通俗的理解是:平常我们new一个实例,这个实例的控制权是我们程序员.

Spring学习(二)spring ioc注入的三种方式

一.spring ioc注入有哪三种方式: a setter 原理 : 在目标对象中,定义需要注入的依赖对象对应的属性和setter方法:"让ioc容器调用该setter方法",将ioc容器实例化的依赖对象通过setter注入给目标对象,封装在目标对象的属性中. b 构造器 原理 : 为目标对象提供一个构造方法,在构造方法中添加一个依赖对象对应的参数.ioc容器解析时,实例化目标对象时会自动调用构造方法,ioc只需要为构造器中的参数进行赋值:将ioc实例化的依赖对象作为构造器的参数传入

Spring IOC注入(三)自动注入

前俩篇讲了一下IOC注入的set方式注入和基于构造器的注入,现在就来讲讲自动注入~ 自动注入:容器依照一些规则去装配bean中的一个属性 注意:自动装配只对[对象类型]起作用,对基本类型不起作用. 自动注入有俩种方式: 第一种: 在beans标签中配置装载方式:defadefault-autowire="byType"或defult-autowire="byName" default-autowire="byType"或default-autow

Spring bean注入方式

Spring bean提供了3中注入方式:属性注入,构造方法注入和 1.属性注入: 1 <bean id="dept" class="com.proc.bean.Dept"> 2 <property name="id" value="2"/> 3 <property name="name" value="信息部"></property> 4

Ioc注入方式写dubbo client(非set beans)

@Autowired注解的方式注解 Spring框架中进行注入式,使用@Autowired. @Autowired可以对成员变量.方法和构造函数进行标注,来完成自动装配的工作,这里必须明确:@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier使用: @Autowired标注可以放在成员变量上,也可以放在成员变量的set方法上.前者,Spring会直接将UserDao类型的唯一一个bean赋值给userDao这个成员变量:后者,Spring会调用se

Java+Spring+Bean+注入方式

1.首先准备共享文件调用方法Client端Client.java: import org.springframework.context.support.ClassPathXmlApplicationContext; public class Client { public static void main(String[] args) { //创建容器 ClassPathXmlApplicationContext cac = new ClassPathXmlApplicationContext

再整合ssh时,关于Spring IOC注入问题

No matching editors or conversion strategy found IOC问题: EmpService bean 实现了 Iemp接口,就不能直接作为参数传入Action里面: 要将Iemp接口作为对象参数传入Action,然后在Action引用接口对象里面的方法. Spring 容器 接口要引用EmpService实现类. <bean id="emp" class="pojo.Emp"/> <bean id=&quo

spring属性注入方式

一.使用有参构造注入属性 配置文件 constructor-arg标签是需注入属性的名字 User类 生成了User的有参构造函数 测试类 结果 打印出了name属性的值 二.使用set方法注入属性 配置文件 property标签的name为注入属性的名字 User类 测试类 结果