Spring 依赖注入 DI 的方式

依赖注入 DI:由容器动态地将某种依赖关系注入到组件中。

假设一个类 MyAction 中需要一个数据访问类的实例 MyDAO

set 方法注入

public class MyAction {
  private MyDAO dao;
  
  // 提供一个 set 方法
  public void setMyDAO(MyDAO dao) {
    this.dao = dao;
  }
}

配置文件:

<!-- 配置 MyDAO 的实例 dao -->
<bean name="dao" class="MyDAO">
  <property name="host" value="..." />
  ...
</bean>

<!-- 配置 MyAction 的实例 action -->
<bean name="action" class="MyAction">
  <!-- 注入 dao 这个 bean -->
  <property name="dao" ref="dao" />
  ...
</bean>

构造方法注入

public class MyAction {
  private MyDAO dao;
  
  // 提供一个包含 dao 的构造方法
  public MyAction(MyDAO dao) {
    this.dao = dao;
  }
}

配置文件:

<!-- 配置 MyDAO 的实例 dao -->
<bean name="dao" class="MyDAO">
  <property name="host" value="..." />
  ...
</bean>

<!-- 配置 MyAction 的实例 action -->
<bean name="action" class="MyAction">
  <!-- 注入 dao 这个 bean -->
  <constructor-arg ref="dao" />
  ...
</bean>

自动装配

Spring 2.5 开始提供了基于注解的自动装配机制来简化依赖注入。

  • @Autowired:基于 类型 的自动装配注入
  • @Resource:基于 名称 的自动装配注入

例如:

public class MyAction {
  @Resource(name="dao")
  private MyDAO dao;
}

以上的 @Resource 代码替换了如下的操作:

// set 方法
public void setMyDAO(MyDAO dao) {
  this.dao = dao;
}
<!-- 配置 MyAction 的实例 action -->
<bean name="action" class="MyAction">
  <!-- 注入 dao 这个 bean -->
  <property name="dao" ref="dao" />
  ...
</bean>
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容