天天看点

Spring 依赖注入的 几种方式

IOC: 控制反转,我觉得很大意义上 是基于类的管理的

DI:   依赖注入,可以是在一个类中注入另一个类,也可以是在一个类中注入另一些 基本数据类型数据(整型等),当然也可以是字符串

先来看依赖于xml 中配置 bean 的 注入方式:

一: set get 注入  (也是最长用的注入方式)

public Class ClassA{

  private ClassB classB;

  private String  string;

  ...

  set 、get 方法

}

来看 我们在 spring-servlet.xml 中的配置

<beans....>

  <bean id="beanID" class="ClassA">

    <property name="classB" ref="ClassBID" />

    <property name="string" type="java.lang.String" value="zhangSan" />

  </bean>

  <bean id="ClassBID" class="ClassB">

<beans>

二: 构造方法注入

public Class ClassA{

  private ClassB classB;

  private String string;

  ...

  public ClassA(ClassB classB,String string){

    this.classB = classB;

    this.string = string;

  }

}

再来看基于 构造方法的注入方式在 xml 中的配置

<beans...>

  <bean id="beanID" class="ClassA">

    <constructor-arg index="0" type="ClassB" ref ="ClassBID" />

    <constructor-arg index="1" type="java.lang.String" value="zhangsan" />

  </bean>  <bean id="ClassBID" ref="ClassB"></bean>

</beans>

----------------------------------------------------------------------------------

应用xml 来配置bean 的好处 松耦合,在以后要修改 类之间的 依赖关系 时,直接修改 xml文件即可

但是在写代码时,一会写业务类,一会切换到 xml 的配置中,思维切换,只会降低开发效率,同时为了提高 程序的内聚性,基于注解的 依赖注入方式 在spring 3.0中支持

三:annotacation 注入

public class ClassA {

  @Resourse// JSR 250 提供的标准注解,默认 是按照 bean 的name(id)去xml 下寻找 该bean

  private ClassB classB;

  

  @Autowired//spring 提供的注解,默认按照bean 的type 去 xml 下寻找 该bean

  @Qualifier(name="beanName")//如果xml 中配置了该type 的类 有多个,防出错,指定按照name 寻找bean

  private ClassC classC;

  

  ...

  //无须再配置 set、get 或者 构造器函数

}

@Component("classB")// 默认类都是 singleton,可以不用指定name

public class ClassB{

  ...

}

@Component

public class ClassC{

  ...

}

最后来看xml 中的配置

<beans ...>

<context:annotation-config/>//提供对相关注解的支持

<context:component-scan base-package="test.*"></context:component-scan>//加载xml 时 扫面 包下的注解

</beans>

转载于:https://www.cnblogs.com/leonkobe/archive/2013/05/13/3075821.html