首先,把Spring需要的五个包导入项目:

commons-logging-1.2.jar

spring-beans-4.3.4.RELEASE.jar

spring-context-4.3.4.RELEASE.jar

spring-core-4.3.4.RELEASE.jar

spring-expression-4.3.4.RELEASE.jar

然后就可以敲代码了:

什么是控制反转

需要获取一个接口的实现类的时候,向spring框架请求它的一个实现类,而不是直接new一个。

 @Test
public void Demo() {
String xml="applicationContext.xml";
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(xml);
SpringService springService=(SpringService) applicationContext.getBean("springService");
springService.UserDesign();
// applicationContext.close();
}

Spring的方法

     @Test
public void Demo2(){
SpringService springService=new SpringServiceImpl();
springService.UserDesign();
}

没有Spring的时候

在没有Spring的时候其实现代码中出现了字段“SpringServiceImpl”,而在Spring的实现时却没有出现。

这就意味着,当我们需要用接口SpringService的另一个实现类(假设是SpringServiceImpl2)来取代SpringServiceImpl时,在第二种情况下必须修改源代码,将字段“SpringServiceImpl”替换为字段“SpringServiceImpl2”。

而在 第一种情况下则不需要,因为实现类的名字并没有在源代码中出现。

Spring是怎么知道我们需要的是SpringService的实现类的呢?

它是通过这个知道的:

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- bean definitions here -->
<bean id="springService" class="com.lille.service.impl.SpringServiceImpl"></bean>
</beans>

XML配置文件

关键就在于配置文件的第八行,这个bean元素。

它的id属性值为“springService”,class属性值为“com.lille.service.impl.SpringServiceImpl”

当这个xml文件通过以下两行代码被加载之后,

 String xml="applicationContext.xml";
ApplicationContext applicationContext=new ClassPathXmlApplicationContext(xml);

加载代码

我们的Spring框架就知道了:

当ApplicationContext这个接口的getBean()方法接收到的参数为“springService”时,将“com.lille.service.impl.SpringServiceImpl”这个类实例化然后return。

假设我们希望用SpringService的另一个实现类来取代它,那么我们只需要修改配置文件就可以了,甚至不需要重新编译源代码。

这就是控制反转

傻瓜式Spring教学第一课的更多相关文章

  1. 傻瓜式Spring教学第二课

    什么是依赖注入 先说什么是依赖 如下: class A{ B b; } class B{ } 则称A依赖B. 依赖:A的某些业务逻辑需要B的参与,如果不对A中的参数b进行实例化,那么A中的某些业务逻辑 ...

  2. Spring入门第一课:Spring基础与配置Bean

    1.入门 Spring是简化java开发的一个框架,其中IoC和AOP是Spring的两个重要核心.由于Spring是非侵入性的,通过Ioc容器来管理bean的生命周期,还整合了许多其他的优秀框架,所 ...

  3. spring学习第一课:spring的jar包下载

    感谢作者: http://yanln.iteye.com/blog/2191312 ---------------------------------------------------------- ...

  4. Spring MVC第一课:用IDEA构建一个基于Spring MVC, Hibernate, My SQL的Maven项目

    作为一个Spring MVC新手最基本的功夫就是学会如何使用开发工具创建一个完整的Spring MVC项目,本文站在一个新手的角度讲述如何一步一步创建一个基于Spring MVC, Hibernate ...

  5. Spring入门第一课

    今天先不讲Spring是什么. Spring网址:http://projects.spring.io/spring-framework/ Eclipse 安装开发IDE 在Eclipse Market ...

  6. Spring第一课:IOC控制反转,什么是反转,什么又是控制?

    前言 学习Spring第一课,就是认识IOC控制反转,要了解它还真得花一些功夫.今天主要理解透彻它的真谛,而不仅限于表面. 上道小菜 public class BusinessService { pr ...

  7. 初识springboot(傻瓜式教程)

    初识springboot(傻瓜式教程) 项目所需的版本 IDEA 2018 maven 3.x jdk-1.8 IDEA创建spring-boot项目(maven方法) 1.创建一个maven工程 点 ...

  8. 第一课Linux系统安装知识(1)

         在做linux下C\C++开发,首先得安装个Linux系统,这节课记录相关系统安装的知识,本文记录虚拟机安装部分.      在linux系统中,现在一般生手都用桌面版,比如比较多人使用的是 ...

  9. ES6新特性之傻瓜式说明

    ES6出来挺长一段时间了,但目前网上好像教程并不多也不详细.我依然遵循傻瓜式教学模式,白话文说明JavaScript和ES6的一些区别,说明下ES6的一些新特性.本文适合新手学习,大神请勿见笑,在下在 ...

随机推荐

  1. JavaPersistenceWithHibernate第二版笔记-第六章-Mapping inheritance-008Polymorphic many-to-one associations(@ManyToOne、@Inheritance、)

    一.结构 二.代码 1. package org.jpwh.model.inheritance.associations.manytoone; import org.jpwh.model.Consta ...

  2. Django扩展Auth-User表的几种方法

    方式1, OneToOneField from django.contrib.auth.models import Userclass UserProfile(models.Model): user ...

  3. vue 之 let 和const

    浏览目录 let const let es6新增了let命令,用来声明变量.它的用法类似于var,但是所声明的变量,只在let命令所在的代码块内有效. 上面代码在代码块之中,分别用let和var声明了 ...

  4. TimerTask

    当TimerTask实例通过schedule方法使用之后,不能通过schedule方法调用第二次,如果重复使用就会抛异常TimerTask is scheduled already. 当你重新想利用这 ...

  5. [jQuery]使用jQuery.Validate进行客户端验证(初级篇)

    以前在做项目的时候就有个很大心病,就是微软的验证控件,虽然微软的验证控件可以帮我们完成大部分的验证,验证也很可靠上手也很容易,但是我就是觉得不爽,主要理由有以下几点: 1.拖控件太麻烦,这个是微软控件 ...

  6. BootStrap母版页布局.子页面布局.BootstrapTable.模态框.警告框.html导出tabl生成Excel.HTML生成柱图.饼图.时间控件中文版

    如上就是很多后台管理系统的母版页布局. 左边一列模板.上面一列系统标识. 空白处充填子页面 以ASP.NET MVC为基础 引入bootstrap.js.bootstrap.css body: < ...

  7. Data Base sql server 备份数据库

    sql server 备份数据库 1.维护计划向导: 右键维护计划-维护计划向导-然后安装提示: 勾选自己要干的事,比如:完整备份数据库.差异备份数据库等等 2.作业计划: 如下图: SQL Serv ...

  8. Java从入门到放弃——05.修饰符static,final,权限修饰符

    本文目标 static final: 权限修饰符:public,private,protected,缺省 1.static 静态修饰符,被static修饰的变量或者方法会被加载进静态区内存,不需要创建 ...

  9. How to solve multi-version conflict of OpenCV or PCL on ROS kinetic?

    Solve multi-version conflict prepare: make sure you know which version is in your machine: dpk-confi ...

  10. 对接极光IM之修改头像

    因为项目中使用了极光IM,在对接极光的时候,发现了如果想要在改变自己个人中心的头像同时改变极光IM的头像,就必须要将本地磁盘的文件上传到极光服务器,根据反馈的media_id来进行修改头像. 但是因为 ...