初学Java ssh之Spring 第三篇

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

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

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

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

  Computer.java代码如下:

1 package com.sep.basic.service;
2
3 public interface Computer {
4     public void useKey();
5 }

  Key.java代码如下:

1 package com.sep.basic.service;
2
3 public interface Key {
4     //一个方法
5     public String print();
6 }

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

  Lenovo.java代码如下:

 1 package com.sep.basic.service.impl;
 2
 3 import com.sep.basic.service.Computer;
 4 import com.sep.basic.service.Key;
 5
 6 public class Lenovo implements Computer{
 7     private Key key;
 8
 9     public Key getKey() {
10         return key;
11     }
12
13     //设值注入所需的setter方法
14     public void setKey(Key key) {
15         this.key = key;
16     }
17
18     //实现Computer接口中使用键盘的属性
19     public void useKey() {
20         System.out.println(key.print());
21     }
22
23 }

  LogicTech.java的代码如下:

 1 package com.sep.basic.service.impl;
 2
 3 import com.sep.basic.service.Key;
 4
 5 public class LogiTech implements Key{
 6     //实现Key接口中打印方法
 7     public String print() {
 8         return "用键盘打字";
 9     }
10
11 }

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

1     <!-- 将配置Lenovo实例 -->
2     <bean id="lenovo" class="com.sep.basic.service.impl.Lenovo">
3         <!-- 将logicTech实例注入到key属性 -->
4         <property name="key" ref="logicTech"></property>
5     </bean>
6     <!-- 将配置LogicTech实例 -->
7     <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的实现类,在配置文件中将

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

  改为

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

即可。

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

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

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

 1 package com.sep.basic.service.impl;
 2
 3 import com.sep.basic.service.Computer;
 4 import com.sep.basic.service.Key;
 5
 6 public class Lenovo implements Computer{
 7     private Key key;
 8
 9     //默认构造器
10     public Lenovo(){};
11
12     //构造注入带参数的构造器
13     public Lenovo(Key key) {
14         this.key = key;
15     }
16
17     //设值注入所需的setter方法
18     public void setKey(Key key) {
19         this.key = key;
20     }
21
22     //实现Computer接口中使用键盘的属性
23     public void useKey() {
24         System.out.println(key.print());
25     }
26
27 }

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

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans
 3     xmlns="http://www.springframework.org/schema/beans"
 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     <!-- 将配置Lenovo实例 -->
 8     <bean id="lenovo" class="com.sep.basic.service.impl.Lenovo">
 9         <constructor-arg ref="logicTech"></constructor-arg>
10     </bean>
11     <!-- 将配置LogicTech实例 -->
12     <bean id="logicTech" class="com.sep.basic.service.impl.LogicTech"></bean>
13 </beans>

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

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

时间: 2024-08-29 19:17:11

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

初学Java ssh之Spring 第四篇

今天我来学习学习Spring中Bean. 在Spring中原来还有<beans.../>标签啊,它相当于<bean.../>标签的老爸,老爸可以有很多个儿子,但是老爸只有一个哦. 也就是说一个<beans.../>标签内可以有多个<bean...>标签,每个<bean.../>标签代表一个java实例. 定义<bean...>时,需要注意两个属性,一个是id,一个是class. id是<bean.../>标签的唯一标示符,

初学Java ssh之Spring 第二篇

上一篇我们成功搭建好了spring开发的环境,接下来一起看看spring有什么神奇的地方吧(本人也是新手,有不太对的地方希望大神给指出便于修改呢,谢谢大家). 之前听说spring是在对xml文件的应用比较多,但是具体怎么用一直都是云里雾里,自己在刚开始的时候学习的时候,因为不是直接新建的web项目,没有自动生成applicationContext.xml,那会不知道这个配置文件是多么的重要,所以在写了如下一段代码之后,运行时,总是报错,还曾傻傻地以为该文件会自动生成,现在想想真可笑.不过如果用

初学Java ssh之Spring 第一篇

之前虽然毕业前实习的工作是使用的C# .NET语言,但是,毕业后还是果断应聘Java.虽然自己对Java的理解不如C#深入,只是对基础知识比较熟悉,但还是义无返顾了··· 虽然应聘经历比较坎坷,但最终还是成功入职了. 刚入职,再加上经验不足,所以最近任务比较少,这样就有大把时间自学了,得抓紧时间积累知识啊,废话少说,步入正题. 对于java,自己的掌握仅限于基础知识,对于框架什么的几乎没有使用过,只大概知道ssh是企业常用的开发框架,struts+hibernate+spring是一套很不错的框

spring第三篇

在昨天下午更新sprin第二篇中,叙述了将对象交给spring创建和管理,今天在spring第三篇中,主要写两个点一是spring的思想 二是spring中bean元素的属性配置. 1 spring思想 1.1 IOC(Inverse of  Control) :控制反转,将对象的创建权交给了 Spring. 1.2  DI :Dependency Injection 依赖注入.需要有IOC 的环境,Spring 创建这个类的过程中,Spring 将类的依赖的属性设置进去. 实现IOC 需要DI

Java SSH (strusts2+spring+hibernate )完结项目源码 mysql

Java SSH (strusts2+spring+hibernate ) 完结项目源码 mysql 用来学习 毕业设计都可 继续二次开发也行 提供文档 数据结构 下载地址: 联系QQ 313596790

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

一.Java Stream管道数据处理操作 在本号之前写过的文章中,曾经给大家介绍过 Java Stream管道流是用于简化集合类元素处理的java API.在使用的过程中分为三个阶段.在开始本文之前,我觉得仍然需要给一些新朋友介绍一下这三个阶段,如图: 第一阶段(图中蓝色):将集合.数组.或行文本文件转换为java Stream管道流 第二阶段(图中虚线部分):管道流式数据处理操作,处理管道中的每一个元素.上一个管道中的输出元素作为下一个管道的输入元素. 第三阶段(图中绿色):管道流结果处理操

Java小白入门系列 第三篇 从新开始

2018年10月9日    17:47:51 郑州    西北风 Sue 越过中秋,迈过国庆,这一个多月乱七八糟又不得不应对的事接踵而至,好在学习一直在持续,用户中心的项目今天终于收尾测试并开始复习,就借着复习,从头开始,把课程捋一遍. 最开始的新手,建议使用记事本(文件格式改为Java)写代码,然后在dos窗口编译运行,熟悉一星期后可以用subline,subline会有部分提示以及颜色字体,比较好用,半月之后可转为eclipse,非常好用.相关软件的下载链接??在文末. Java历史及发展就

JAVA企业应用【第三篇】TOMCAT配置

1.server.xml组件类别 顶级组件:位于整个配置的顶层,如server.容器类组件:可以包含其它组件的组件,如service.engine.host.context.连接器组件:连接用户请求至tomcat,如connector.被嵌套类组件:位于一个容器当中,不能包含其他组件,如Valve.logger. <server> <service> <connector /> <engine> <host> <context><

Spring第四篇

在spring第三篇中介绍了bean元素属性 在第四篇中介绍spring注入的方式 1 set方法注入 建立一个User类 创建私有的属性 set  get 方法  重写toString方法 代码如下: package bean; public class User { private String name; private int age; public String getName() { return name; } public void setName(String name) {