在这篇中,我学习了依赖注入的两种方式:设值注入和构造注入。

  在我们以前的思维中,如果调用一个类时,我们都需要将其手动实例化,当我们创建被调用的工作不需要我们完成时,这就是控制反转,当这个将被调用的实例过程被Spring完成,并注入调用者时,这就是依赖注入。

  一、先来学习学习设值注入:

  我们先来新建两个接口规范,分别命名为Computer.java 和 Key.java,其路径均在com.sep.basic.service包下:

  Computer.java代码如下:

 package com.sep.basic.service;

 public interface Computer {
public void useKey();
}

  Key.java代码如下:

 package com.sep.basic.service;

 public interface Key {
//一个方法
public String print();
}

  接下来写两个实现类,分别命名为Lenovo.java和LogiTech.java,分别实现Computer和Key接口,路径放在com.sep.basic.service.impl包下。

  Lenovo.java代码如下:

 package com.sep.basic.service.impl;

 import com.sep.basic.service.Computer;
import com.sep.basic.service.Key; public class Lenovo implements Computer{
private Key key; public Key getKey() {
return key;
} //设值注入所需的setter方法
public void setKey(Key key) {
this.key = key;
} //实现Computer接口中使用键盘的属性
public void useKey() {
System.out.println(key.print());
} }

  LogicTech.java的代码如下:

 package com.sep.basic.service.impl;

 import com.sep.basic.service.Key;

 public class LogiTech implements Key{
//实现Key接口中打印方法
public String print() {
return "用键盘打字";
} }

  接下来我们配置applicationContext.xml文件,在其中加入如下代码:

     <!-- 将配置Lenovo实例 -->
<bean id="lenovo" class="com.sep.basic.service.impl.Lenovo">
<!-- 将logicTech实例注入到key属性 -->
<property name="key" ref="logicTech"></property>
</bean>
<!-- 将配置LogicTech实例 -->
<bean id="logicTech" class="com.sep.basic.service.impl.LogicTech"></bean>

  ok,接下来回到我们之前测试用的主方法,SpringTest中,在其中加入如下代码:

//通过Spring来完成注入
Lenovo lenovo = ctx.getBean("lenovo", Lenovo.class);
lenovo.useKey();

  现在运行,可以看到控制台输出“用键盘打字”。

  在applicationContext.xml中<bean>标签中的id为bean的唯一标识,class为对应的需要实例化的类的地址。

  通过写在SpringTest中代码可以看出我们调用的lenovo类,我们并没有手动实例化,而且其中调用的key,我们也没有做过多余的操作,所有的工作都是spring帮我们完成的,它通过配置文件,不仅仅创建了我们的Lenovo实例,而且将其中设值注入的key实例也帮我们建好了。

  假如我们到时候需要改变key的值,我们只需要写好对应的key的实现类,在配置文件中将

 <!-- 将配置LogicTech实例 -->
<bean id="logicTech" class="com.sep.basic.service.impl.LogicTech"></bean>

  改为

<!-- 将配置LogicTech实例 -->
7 <bean id="logicTech" class="对应的实现类全名称"></bean>

即可。

  二、我现在开始学习构造注入:

  简单从字面意思上来看,构造注入是利用构造器来完成设置依赖关系的方式。

  首先我们需要对之前的Lenovo.class进行修改,修改后的代码如下:

 package com.sep.basic.service.impl;

 import com.sep.basic.service.Computer;
import com.sep.basic.service.Key; public class Lenovo implements Computer{
private Key key; //默认构造器
public Lenovo(){}; //构造注入带参数的构造器
public Lenovo(Key key) {
this.key = key;
} //设值注入所需的setter方法
public void setKey(Key key) {
this.key = key;
} //实现Computer接口中使用键盘的属性
public void useKey() {
System.out.println(key.print());
} }

  同样,配置文件需要做出对应的修改,构造注入需要使用<constructor-arg```>标签来完成,修改后代码如下:

 <?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">
<!-- 将配置Lenovo实例 -->
<bean id="lenovo" class="com.sep.basic.service.impl.Lenovo">
<constructor-arg ref="logicTech"></constructor-arg>
</bean>
<!-- 将配置LogicTech实例 -->
<bean id="logicTech" class="com.sep.basic.service.impl.LogicTech"></bean>
</beans>

  运行,同样可以看到语句输出:“用键盘打字”。

  ok,两种方法的依赖注入我就都实现了,需要消化的东西很多啊,我还得自己琢磨琢磨,话说打这么多字很累啊,要不是最近工作不怎么忙,我估计得打字打到吐血啊!

初学Java ssh之Spring 第三篇的更多相关文章

  1. 初学Java ssh之Spring 第四篇

    今天我来学习学习Spring中Bean. 在Spring中原来还有<beans.../>标签啊,它相当于<bean.../>标签的老爸,老爸可以有很多个儿子,但是老爸只有一个哦 ...

  2. 初学Java ssh之Spring 第二篇

    上一篇我们成功搭建好了spring开发的环境,接下来一起看看spring有什么神奇的地方吧(本人也是新手,有不太对的地方希望大神给指出便于修改呢,谢谢大家). 之前听说spring是在对xml文件的应 ...

  3. 初学Java ssh之Spring 第一篇

    之前虽然毕业前实习的工作是使用的C# .NET语言,但是,毕业后还是果断应聘Java.虽然自己对Java的理解不如C#深入,只是对基础知识比较熟悉,但还是义无返顾了··· 虽然应聘经历比较坎坷,但最终 ...

  4. spring第三篇

    在昨天下午更新sprin第二篇中,叙述了将对象交给spring创建和管理,今天在spring第三篇中,主要写两个点一是spring的思想 二是spring中bean元素的属性配置. 1 spring思 ...

  5. Spring第三篇【Core模块之对象依赖】

    前言 在Spring的第二篇中主要讲解了Spring Core模块的使用IOC容器创建对象的问题,Spring Core模块主要是解决对象的创建和对象之间的依赖关系,因此本博文主要讲解如何使用IOC容 ...

  6. SSH框架之Spring第三篇

    1.1 AOP概述 1.1.1 什么是AOP? AOP : 全称是Aspect Oriented Progamming既 : 面向切面编程.通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技 ...

  7. Java Stream函数式编程第三篇:管道流结果处理

    一.Java Stream管道数据处理操作 在本号之前写过的文章中,曾经给大家介绍过 Java Stream管道流是用于简化集合类元素处理的java API.在使用的过程中分为三个阶段.在开始本文之前 ...

  8. 总结java创建文件夹的4种方法及其优缺点-JAVA IO基础总结第三篇

    本文是Java IO总结系列篇的第3篇,前篇的访问地址如下: 总结java中创建并写文件的5种方式-JAVA IO基础总结第一篇 总结java从文件中读取数据的6种方法-JAVA IO基础总结第二篇 ...

  9. Java框架之Spring(三)

    本文主要介绍Spring中, 1 Bean 的 init-method 和 destroy-method 2 集合类型的装配 3 注解方式装配 4 以自动扫描把组件纳入spring容器中管理 5 代理 ...

随机推荐

  1. js中的apply call 操作小结(参考自网络)

    1.方法定义 call方法:  语法:call([thisObj[,arg1[, arg2[,   [,.argN]]]]]) 定义:调用一个对象的一个方法,以另一个对象替换当前对象 说明: call ...

  2. 使用ecshop电子商务系统的100个小问题

    1:如何修改网站"欢迎光临本店" 回答:languages\zh_cn\common.php文件中, $_LANG['welcome'] = '欢迎光临本店';将他修改成你需要的字 ...

  3. CentOS 6.5上安装Python 2.7.9

    CentOS 6.6自带的是Python 2.6.6,而编译llvm需要Python 2.7以上. checking for python... /usr/bin/python checking fo ...

  4. 在PHP中获取日期和时间

    PHP提供了多种获取时间和日期的函数,除了通过time()函数获取当前的UNIX时间戳外,调用getdate()函数确定当前时间,通过gettimeofday()函数获取某一天中的具体时间.此外,在P ...

  5. centos 下mysql操作

    MySQL名字的来历MySQL是一个小型关系型数据库管理系统,MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度 快.总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为 ...

  6. Jsonp 解决跨域问题

    话不多说直接贴代码: $.ajax({ async: false, url: 'http://****.****.com/Handler.ashx?vueId=iwNavpicS2', type: & ...

  7. Vxworks、QNX、Xenomai、Intime、Sylixos、Ucos等实时操作系统的性能特点

    Vxworks.QNX.Xenomai.Intime.Sylixos.Ucos等实时操作系统的性能特点 VxWorks操作系统 VxWorks 操作系统是美国WindRiver公司于1983年设计开发 ...

  8. 热门usb无线网卡

    拓实 N910 N95 N82 N81 N89 都是3070的 拓实 N87 G618 是8187的硬功夫 216 310 217 218 300 315 335 350 370 380 510 53 ...

  9. ASP.NET 表单认证与角色授权

    参考 : http://hi.baidu.com/iykqqlpugocfnqe/item/e132329bdea22acbb6253105  ASP.NET中处理请求的流程图 http://www. ...

  10. 基于HTML5 Canvas的饼状图表实现教程

    昨天我们分享了一款基于HTML5的线性图表应用,效果非常不错,可以看在线DEMO或者实现教程.今天我们继续来分享一款基于HTML5的网页图表,它也是利用Canvas绘制的,但是和前面不同的是,这款图表 ...