欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解Spring 两种注入的方式(Set和构造)实例

程序员文章站 2024-03-06 16:34:20
依赖注入是指对象之间关系的控制权由应用代码中转到外部容器。spring框架主要提供了set注入和构造注入两种依赖注入方式。 1:set注入指的就是在接受注入的类中定义...

依赖注入是指对象之间关系的控制权由应用代码中转到外部容器。spring框架主要提供了set注入和构造注入两种依赖注入方式。

1:set注入指的就是在接受注入的类中定义一个要被注入的类型的一个set方法,并在参数中定义需要注入的元素。set注入式一种装配bean属性的直接方法,但set注入的一个缺点就是它假设了所有的可变属性都可以通过set方法访问到,无法清晰地表示哪些属性是必须的,哪些属性是可选的。

2:构造注入是在接收注入的类中定义一个构造方法,并在构造方法中定义需要注入的参数。构造注入方式的优势是通过构造方法来强制依赖关系。

下面介绍一下两种方式的用法:

一:在myeclipse中(笔者使用的是myeclipse10版本)新建一个项目(java project或者web project都可)

二:右键项目 - myeclipse - add spring capabilities(添加spring支持),选择3.0版本并添加引用核心类库,点击下一步。

三:选择新创建一个spring bean 配置文件放到项目src目录下。

四:点击下一步,指定hibernate 配置页,直接默认,点击完成即可。

五:新建类 helloworld.java

package com.xiami.spring; 
 
public class helloworld { 
 
  private string str; 
 
  /** 
   * 默认构造方法 
   */ 
  public helloworld() { 
  } 
 
  /** 
   * 用来进行构造注入的构造方法 
   * 
   * @param str 
   */ 
  public helloworld(string str) { 
    this.str = str; 
  } 
 
  /** 
   * 用来进行set注入的方法 
   * @param str 
   */ 
  public void setstr(string str) { 
    this.str = str; 
  } 
 
  /** 
   * 输出字符串的方法 
   */ 
  public void sayhello() { 
    system.out.println(str); 
  } 
} 

六:新建测试类test.java

package com.xiami.spring; 
 
import org.springframework.beans.factory.beanfactory; 
import org.springframework.beans.factory.xml.xmlbeanfactory; 
import org.springframework.core.io.classpathresource; 
 
public class test { 
 
  /** 
   * @param args 
   */ 
  public static void main(string[] args) { 
    // todo auto-generated method stub 
    //载入spring配置文件 
    beanfactory bfactory = new xmlbeanfactory(new classpathresource("applicationcontext.xml")); 
    helloworld helloworld = (helloworld) bfactory.getbean("helloservice"); 
    helloworld.sayhello(); 
  } 
 
} 

七:打开applicationcontext.xml文件,进行添加bean配置

以下是两种方式添加bean:

1:采用set注入方式的bean类的配置

右击applicationcontext.xml的编辑界面 - spring - new bean 打开bean向导窗口,填写bean id(自定义命名和test.java中getbean("???")对应。bean class 选择要注入的helloworld类。点击properties属性选项卡,给该bean新建一个属性。

八:在属性向导窗口填写 name 对应helloworld.java中的属性名称,spring type 选择value,type选择string,value 随便填值。finish 既可。

九:保存applicationcontext.xml, 添加bean后,配置文件多了红色标记的部分,读者可以运行test.java。测试一下。发现hello world字符串已经注入到了str变量上。

<?xml version="1.0" encoding="utf-8"?> 
<beans 
  xmlns="http://www.springframework.org/schema/beans" 
  xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" 
  xmlns:p="http://www.springframework.org/schema/p" 
  xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> 
 
   
  <!-- 使用set方式注入 --> 
  <!--  
  <span style="color:#ff0000;"><bean id="helloservice" class="com.xiami.spring.helloworld" 
    abstract="false" lazy-init="default" autowire="default"> 
    <property name="str"> 
      <value type="java.lang.string">hello world</value> 
    </property> 
  </bean></span> 
   --> 
    
   <!-- 使用构造方法方式注入  
   <bean id="helloservice" class="com.xiami.spring.helloworld" 
    abstract="false" lazy-init="default" autowire="default"> 
    <constructor-arg> 
      <value type="java.lang.string">构造方法注入方式</value> 
    </constructor-arg> 
   </bean> 
   --> 
    
   </beans> 

2:采用构造注入方式的bean类的配置

在以上set方式的bean wizard(bean 向导)窗口,不选择properties选项卡,变为constructor args选项卡。并add 新增一个构造参数。index和java class 不用填写。

十:在增加构造方式bean的时候,之前第一个得先注释或者删除,不允许有多个id相同的bean。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。