Spring 之IOC 详解

目录

 

第一节:spring ioc 简介

第二节:spring ioc 实例讲解第三节:装配一个 bean

第四节:依赖注入

第五节:注入参数

第六节:Spring 自动装配

开始学习:

(1)IOC(控制反转)出现的原因(举例子进行说明)       

(2)实现简便版本的IOC(控制反转)思想:多态,接口,继承

(3)使用Spring管理IOC容器。

【举例子版源代码】

【简便版本IOC 源代码实现】


第一节:spring ioc 简介

 

IOC(控制反转:Inverse of Control ),又称作 依赖注入,是一种重要的面向对象编程的法则来削减计算机程序的耦合问题,也是轻量级的 Spring 框架的核心。

第二节:spring ioc 实例讲解第三节:装配一个 bean

第四节:依赖注入

 

1,属性注入;

2,构造函数注入;(通过类型;通过索引;联合使用)

3,工厂方法注入;(非静态工厂,静态工厂)

4,泛型依赖注入;(Spring4 整合 Hibernate4 的时候顺带讲)

第五节:注入参数

 

1,基本类型值; 2,注入 bean; 3,内部 bean; 4,null 值;

5,级联属性;

6,集合类型属性;

第六节:Spring 自动装配

通过配置 default-autowire 属性,Spring IOC 容器可以自动为程序注入 bean;默认是 no,不启用自动装配; default-autowire 的类型有 byName,byType,constructor;

byName:通过名称进行自动匹配; byType:根据类型进行自动匹配;

constructor:和 byType 类似,只不过它是根据构造方法注入而言的,根据类型,自动注入; 建议:自动装配机制慎用,它屏蔽了装配细节,容易产生潜在的错误;

开始学习:

(1)IOC(控制反转)出现的原因(举例子进行说明)       

代码copy请看我【举例子版源代码】

新建JavaWork,obZhangSan,Test  .java三个文件。

内部内容:

然后执行Test.java

 

 

重点!!!

分析上面的程序(javawork,zhangsan   .java)

我们会发现,测试这个工作,完全和那个人耦合在了一起。

假如,测试员换人了,换成了李四,我们发现,代码统统都要换!!!

 

这就导致了,文件变化太大,破坏了完整性。

这个时候就有了IOC的设计思路。

控制反转——把这个控制权转交出来,某个人执行的测试工作转交给主管。

 

(2)实现简便版本的IOC(控制反转)思想:多态,接口,继承

代码copy请看我【简便版本IOC 源代码实现】

首先你得通过一个接口(Interface)!!!

 

1.先定义一个接口方法,然后让测试人员继承它

2.新增了一个李四测试人员:

3.更改张三代码,使其继承测试接口

4.定义set方法(使之定义使用哪一个测试员),然后那个被定义好的测试员再在主管那里去被调用,再去调用自身的test方法,其test的方法是我们从接口继承而来,又重新实现的。

5.主管。

 

(3)使用Spring管理IOC容器。

8min,明天更新。

 

【举例子版源代码】

obZhangSan.java

package service;

public class obZhangSan {

   //张三测试员,具备做测试的动作。

   public void test(){

     System.out.println("张三-测试程序");

   }

}

 

Test.java

package test;

import service.JavaWork;

public class Test {

   //主管执行命令

   public static void main(String[] args) {

     JavaWork javawork=new JavaWork();

     javawork.doTest();

   }

}

 

JavaWork.java

package service;

public class JavaWork {

 

   //java测试工作

   public void doTest(){

     obZhangSan zhangsan=new obZhangSan();

     zhangsan.test();//张三来做测试操作。

   }

}

 

【简便版本IOC 源代码实现】

Tester.java

package service;

public interface Tester {//这就是一个接口方法,然后我们让测试人员继承它!

    public void test();//运用到的多态的思想

}

 

LiSi.java

package service;

public class LiSi implements Tester{

    public void test(){

       System.out.println("李四-测试程序");

    }

}

 

obZhangSan.java

package test;

import service.JavaWork;

import service.LiSi;

import service.obZhangSan;

public class Test {

 

    //主管执行命令

    public static void main(String[] args) {

       JavaWork javawork=new JavaWork();

       //javawork.setTester(new obZhangSan());

       //假如这里需要换一个人了,代码就完全不需要动。

       javawork.setTester(new LiSi());

      

       javawork.doTest();

    }

    //这样子控制权就不是业务代码来管理的,控制权就移交给了住惯了。

}

 

JavaWork.java

package service;

public class JavaWork {

    //定义一个测试员,具体谁来执行,从主管那边设置。

    private Tester tester;//然后还需要一个set方法,快捷。

 

    public void setTester(Tester tester) {

       this.tester = tester;

    }

 

    //java测试工作

    public void doTest(){

    /*  obZhangSan zhangsan=new obZhangSan();

       zhangsan.test();//张三来做测试操作。*/   

       tester.test();//只需要某个人来做测试,而不用具体管做测试的是谁。

       }

}

 

Test.java

package test;

import service.JavaWork;

import service.LiSi;

import service.obZhangSan;

public class Test {

    //主管执行命令

    public static void main(String[] args) {

       JavaWork javawork=new JavaWork();

       //javawork.setTester(new obZhangSan());

       //假如这里需要换一个人了,代码就完全不需要动。

       javawork.setTester(new LiSi());

      

       javawork.doTest();

    }

    //这样子控制权就不是业务代码来管理的,控制权就移交给了住惯了。

}

 

 

 

 

 

发布了44 篇原创文章 · 获赞 16 · 访问量 3888

猜你喜欢

转载自blog.csdn.net/HDZ1821/article/details/104486168