服务器之家

服务器之家 > 正文

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

时间:2020-08-19 11:43     来源/作者:passport_daizi

依赖注入是指对象之间关系的控制权由应用代码中转到外部容器。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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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变量上。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<?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。

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

原文链接:http://blog.csdn.net/kalision/article/details/41011491

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享
歪歪漫画vip账号共享2020_yy漫画免费账号密码共享 2020-04-07
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
最新idea2020注册码永久激活(激活到2100年)
最新idea2020注册码永久激活(激活到2100年) 2020-07-29
男生常说24816是什么意思?女生说13579是什么意思?
男生常说24816是什么意思?女生说13579是什么意思? 2019-09-17
返回顶部