一,依赖注入:Dependency Injection(DI)与控制反转(IoC),不同角度但是同一个概念。首先我们理解一点在传统方式中我们使用new的方式来创建一个对象,这会造成对象与被实例化的对象之间的耦合性增加以致不利于维护代码,这是很难受的。在spring框架中对象实例改由spring框架创建,spring容器负责控制程序之间的关系,这就是spring的控制反转。在spring容器的角度看来,spring容器负责将被依赖对象赋值给成员变量,这相当于为实例对象注入了它所依赖的实例,这是spring的依赖注入。

二,依赖注入的实现(测试):

①建立Phone接口(call()方法),Student接口(learn()方法) 

 package com.home.homework;
public interface Phone
{
//define一个方法
public void call();
}
 package com.home.homework;
public interface Student
{
//define一个learn()方法
public void learn();
}

②建立PhoneImpl实现类(实现call()方法),StudentImpl实现类(创建name,phone属性并实现learn()方法)

 package com.home.homework;
public class PhoneImpl implements Phone{
//实现Phone接口中的call()方法
public void call()
{
System.out.println("calling .....! ");
}
}
 package com.home.homework;
public class StudentImpl implements Student
{
//define student's name属性
private String name="Texsin";
//define一个phone属性
private Phone phone;
//创建setPhone方法,通过该方法可以为phone赋值
public void setPhone(Phone phone)
{
this.phone = phone;
}
//实现call方法,并且实现Student接口中的learn()方法
public void learn()
{
this.phone.call();
System.out.println(name+"is learning via MIX");
}
}

③建立Spring配置文件beans.xml

④在配置文件中将phone(bean)使用setter方法注入到student(bean)中

 <?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-4.3.xsd">
<bean id="phone" class="com.home.homework.PhoneImpl" />
<bean id="student" class="com.home.homework.StudentImpl">
<property name="phone" ref="phone"></property>
</bean>
</beans>

⑤建立TestSpring测试类,在main()方法中进行测试

 package com.home.homework;

 import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class TestSpring {
public static void main(String[] args)
{
//创建ApplicationContext接口实例,指定XML配置文件,初始化实例
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("com/home/homework/beans.xml");
//通过容器获取student实例
Student student=(Student) applicationContext.getBean("student");
//调用实例中的learn方法
student.learn();
}
}

⑥测试结果

三,测试过程中遇到的错误:接口与方法类通过继承实现不然将报以下错误(接口与实现类间通过implements传递)

    

第一个Spring程序(DI的实现)的更多相关文章

  1. 2、Spring的 IoC详解(第一个Spring程序)

    Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架.在这句话中重点有两个,一个是IoC,另一个是AOP.今天我们讲第一个IoC. IoC概念 ...

  2. 【Spring学习笔记-2】Myeclipse下第一个Spring程序-通过ClassPathXmlApplicationContext加载配置文件

    *.hl_mark_KMSmartTagPinkImg{background-color:#ffaaff;}*.hl_mark_KMSmartTagBlueImg{background-color:# ...

  3. spring之第一个spring程序

    spring具体描述: 轻量级 IOC:依赖注入 AOP:面向切片编程 容器:spring是一个容器,包含并且管理应用的生命周期 框架 一站式 一.搭建spring开发环境 在eclipse中新建一个 ...

  4. Spring-02 第一个Spring程序

    Spring-02 第一个Spring程序 第一个Spring程序 1.导入依赖 <dependency> <groupId>org.springframework</g ...

  5. 第一个Spring程序HelloWorld

    对于初学者而言,任何理论化的讲解都比不上一个简单的HelloWorld,我们在学习Spring时也不外乎用最简单的HelloWorld程序来将这个灵活而又强大的轻量级框架推送到诸位面前.想要说明的是现 ...

  6. 我的第一个Spring程序

    1.程序结构 2.各个文件 ByeService.java package com.service; public class ByeService { private String name; pu ...

  7. 吴裕雄--天生自然JAVA SPRING框架开发学习笔记:第一个Spring程序

    1. 创建项目 在 MyEclipse 中创建 Web 项目 springDemo01,将 Spring 框架所需的 JAR 包复制到项目的 lib 目录中,并将添加到类路径下,添加后的项目如图 2. ...

  8. Spring学习之路三——第一个Spring程序(体会IoC)

    体会IoC:Spring通过一种称作控制反转(IoC)的技术促进了松耦合.当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象.你可以认为IoC与JN ...

  9. spring学习之第一个spring程序

    spring的入门程序 1.在Eclipse中创建Java项目,并将spring的四个核心包和依赖包添加到src里,发布到类路劲下,项目如图所示: 2.UserDao程序如下: package com ...

随机推荐

  1. 转载:如何使用RFT自动打开IE

    如何在RFT测试脚本中打开IE浏览器?   第一步,配置应用程序进行测试: “配置”菜单 ——> “配置应用程序进行测试...”,进入下面这个界面,默认三个自带的应用程序,点击“添加”加入IE. ...

  2. iOS Programming Controlling Animations 动画

    iOS Programming Controlling Animations 动画 The word "animation" is derived from a Latin wor ...

  3. 解决VS2010警告unsuccessfulbuild”,因为已指定“AlwaysCreate”

    找到文件C:\Program Files (x86)\MSBuild\Microsoft.Cpp\v4.0\Microsoft.CppBuild.targets: 定位到<Touch Alway ...

  4. Android(java)学习笔记188:学生信息管理系统案例(SQLite + ListView)

    1.首先说明一个知识点,通常我们显示布局文件xml都是如下: setContentView(R.layout.activity_main): 其实每一个xml布局文件就好像一个气球,我们可以使用Vie ...

  5. css 样式渲染

     1.文字过长时,自动换行

  6. CREATE USER - 创建一个新的数据库用户帐户

    SYNOPSIS CREATE USER name [ [ WITH ] option [ ... ] ] where option can be: SYSID uid | [ ENCRYPTED | ...

  7. js 异步提交文件

    <form method="POST" action="${ctx}/statement/manage/upload" name="form&q ...

  8. 05CSS链接

    CSS链接 链接的四种状态: •  a:link - 普通的.未被访问的链接 •  a:visited - 用户已访问的链接 •  a:hover - 鼠标指针位于链接的上方 •  a:active ...

  9. 13C++异常处理

    异常处理 14.1.1 异常处理的任务 程序编制者不仅要考虑程序没有错误的理想情况,更要考虑程序存在错误时的情况,应该能够尽快地发现错误,消除错误. 程序中常见的错误有两大类: 语法错误和运行错误.在 ...

  10. 第2节 hive基本操作:12、hive当中的hql语法

    3.2. hive查询语法 3.2.1.SELECT https://cwiki.apache.org/confluence/display/Hive/LanguageManual+Select 基本 ...