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

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

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

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

Computer.java代码如下:

1 packagecom.sep.basic.service;2

3 public interfaceComputer {4 public voiduseKey();5 }

Key.java代码如下:

1 packagecom.sep.basic.service;2

3 public interfaceKey {4 //一个方法

5 publicString print();6 }

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

Lenovo.java代码如下:

1 packagecom.sep.basic.service.impl;2

3 importcom.sep.basic.service.Computer;4 importcom.sep.basic.service.Key;5

6 public class Lenovo implementsComputer{7 privateKey key;8

9 publicKey getKey() {10 returnkey;11 }12

13 //设值注入所需的setter方法

14 public voidsetKey(Key key) {15 this.key =key;16 }17

18 //实现Computer接口中使用键盘的属性

19 public voiduseKey() {20 System.out.println(key.print());21 }22

23 }

LogicTech.java的代码如下:

1 packagecom.sep.basic.service.impl;2

3 importcom.sep.basic.service.Key;4

5 public class LogiTech implementsKey{6 //实现Key接口中打印方法

7 publicString print() {8 return "用键盘打字";9 }10

11 }

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

1

2

3

4

5

6

7

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

//通过Spring来完成注入

Lenovo lenovo = ctx.getBean("lenovo", Lenovo.class);

lenovo.useKey();

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

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

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

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

1

2

改为

7

即可。

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

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

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

1 packagecom.sep.basic.service.impl;2

3 importcom.sep.basic.service.Computer;4 importcom.sep.basic.service.Key;5

6 public class Lenovo implementsComputer{7 privateKey key;8

9 //默认构造器

10 publicLenovo(){};11

12 //构造注入带参数的构造器

13 publicLenovo(Key key) {14 this.key =key;15 }16

17 //设值注入所需的setter方法

18 public voidsetKey(Key key) {19 this.key =key;20 }21

22 //实现Computer接口中使用键盘的属性

23 public voiduseKey() {24 System.out.println(key.print());25 }26

27 }

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

1 <?xml version="1.0" encoding="UTF-8"?>

2

4 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

5 xmlns:p="http://www.springframework.org/schema/p"

6 xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

7

8

9

10

11

12

13

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

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

java ssh 学习_初学Java ssh之Spring 第三篇相关推荐

  1. java心得体会_初学java之心得体会

    0.前言 从学习java以来,已经进行过三次pta作业的训练.虽然每次作业的完成都遇到了些许困难和障碍,不是一帆风顺的,但通过自己的摸索,实践,总能完成作业要求,每次作业之后都有不同的收获.这些新的收 ...

  2. java项目学习_一个Java项目的学习

    1. java命令行的启动 首先是gradle build 其次是:java -Dabc.appid=1234 -classpath "a.jar:b.jar"  com.ctri ...

  3. java 栈空间_初学JAVA——栈空间堆空间的理解

    1.Person pangzi;    //这是在"开拓空间"于栈空间 pangzi=new Person();    //这是赋值于堆空间 上两步就是在做与空间对应的事. 2.值 ...

  4. 学java用什么写比较好_学习Java需要什么基础,初学Java如何写好代码

    原标题:学习Java需要什么基础,初学Java如何写好代码 初学Java的同学时常会遇到这样的情况,跟着入门教程看过一遍,但需要自己写代码的时候却无从下手:写代码的时候时常会遇到不懂的地方,如果停下来 ...

  5. 莆田Java开发_莆田学java编程,莆田java编程学习学校,莆田java编程学习一般能拿多少工资...

    莆田学java编程,莆田java编程学习学校,莆田java编程学习一般能拿多少工资 首页 > java > 莆田学java编程 作者:镀金池   发布时间:2017-10-18 06:51 ...

  6. JAVA技术交流(学习群):51194570;JAVA技术交流(应用群):51194804

    JAVA技术交流(学习群):51194570;--Java技术学习交流平台 JAVA技术交流(应用群):51194804 --专注Java EE技术研究与应用 有兴趣的朋友+

  7. java编程需要数学知识吗_初学Java编程,需要英语和数学基础吗?

    原标题:初学Java编程,需要英语和数学基础吗? "学习Java编程英语和数学是必备条件吗?"很多Java零基础学习或者转型IT行业的都会有这样的疑问,其实刚开始学习Java编程是 ...

  8. java教学目标_成为Java高手的25个学习目标

    1.需要精通面向对象分析与设计(OOA/OOD).涉及模式(GOF,J2EEDP)以及综合模式,应该了解UML,尤其是 class,object,interaction以及statediagrams. ...

  9. java入门应该学什么_初学Java应该掌握哪些基础知识?

    Java出现以前,Internet上的信息内容都是一些乏味死板的HTML文档.这对于那些迷恋于WEB浏览的人们来说简直不可容忍.Java是一种简单的,面向对象的,分布式的,解释型的,健壮安全的,结构中 ...

  10. 学习java后端路线心得_我最推荐的一张Java后端学习路线图,Java工程师必备

    # 阿里面经 [阿里中间件研发面经](http://mp.weixin.qq.com/s?__biz=MzUyMDc5MTYxNA==&mid=2247483852&idx=1& ...

最新文章

  1. mysql主从数据库含义_(转)Mysql数据库主从心得整理
  2. C#设置本地网络(DNS、网关、子网掩码、IP)
  3. pytorch scatter_函数学习笔记
  4. 页面传值-laber
  5. linux7.3系统u盘制作,制作centos7U盘启动盘
  6. 牌类游戏使用微服务重构笔记(八): 游戏网关服务器
  7. 第八届蓝桥杯第八题日期问题
  8. OpenGL ES API with no current context
  9. pdf和图片之间的转换
  10. 实用工具软件远古大神Nir Sofer,数百款短小精悍便携工具,从Win2000到Win10通吃
  11. sis forum index.php,SiS001 获取当前服务器的Ip地址
  12. 年度光电领域盛会——CIOE中国光博会开幕在即!小枣君将全程在线直播!
  13. mac 装java ecli_Eclipse下Maven安装和配置
  14. vue3 创建vue3模板
  15. 八斗大数据20期冲击百万年薪完结分享
  16. 0.泡妞与设计模式(一)工厂模式
  17. OkHttp面试之--HttpEngine中的readResponse流程简介
  18. 基于python 的股票行情查询系统开发(一)
  19. 键盘鼠标比厕所脏400倍当心电脑操作染疾病
  20. 大数据24小时:Salesforce拟65亿美元收购Mulesoft,林志颖加盟小黑鱼科技任首席体验官

热门文章

  1. ORB_SLAM2探秘 第三章 LoopClosing线程
  2. ajax跨域请求jsonp
  3. 回顾:饶毅教授的一次采访
  4. JavaScript(二)数据类型(二)
  5. WordPress 中文图片 上传 自动重命名
  6. CMD中文显示为乱码
  7. socket 异常类型
  8. 【OpenCV学习笔记】【函数学习】十四(cvSeq的用法说明(功能很多,按照需求使用))
  9. 【LeetCode】【字符串】题号:*58. 最后一个单词的长度
  10. 剑指offer(数值的整数次方)