您的位置:首页 > 编程语言 > Java开发

Spring 依赖注入的 几种方式

2013-05-13 15:27 351 查看
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;

  /**
  *privatet String string; 基本数据类型 用注解 好像没有好的解决方案。。。
  */
  ...
  //无须再配置 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 时 扫面 包下的注解
/**
* 可以不用配置 bean 类
*/
</beans>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: