目录
第二节:spring ioc 实例讲解第三节:装配一个 bean
(2)实现简便版本的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();
}
//这样子控制权就不是业务代码来管理的,控制权就移交给了住惯了。
}